﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	Просрочена = ЗначениеЗаполнено(Объект.ДатаОкончания) И КонецДня(Объект.ДатаОкончания) < ТекущаяДатаСеанса();
	
	ПериодОпросаСтатусов = 300;
	ТребуетсяОбновлениеДекораций = Истина;
	
	Если Параметры.Ключ.Пустая() Тогда
		
		Объект.ФайлДоверенности = Неопределено;
		Объект.ДатаВыдачи = ТекущаяДатаСеанса();
		
		Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда
			ПрочитатьРеквизиты(Параметры.ЗначениеКопирования.ПолучитьОбъект());
		ИначеЕсли ЗначениеЗаполнено(Параметры.Доверитель) Или ЗначениеЗаполнено(Параметры.Представитель) Тогда
			Если ЗначениеЗаполнено(Параметры.Доверитель) Тогда
				ДобавитьУчастника(Параметры.Доверитель, "Доверитель");
			КонецЕсли;
			Если ЗначениеЗаполнено(Параметры.Представитель) Тогда
				ДобавитьУчастника(Параметры.Представитель, "Представитель");
			КонецЕсли;
			ТекущийОбъект = РеквизитФормыВЗначение("Объект");
			ОбновитьОбъект(ТекущийОбъект);
		КонецЕсли;
		
		Объект.Ответственный = Пользователи.ТекущийПользователь();
		
		Если ЗначениеЗаполнено(Параметры.Полномочия) Тогда
			ЗаполнитьПолномочияПоКодам(Параметры.Полномочия);
		КонецЕсли;
		
	Иначе
		ДанныеСостояния = МашиночитаемыеДоверенностиФНССлужебный.ПрочитатьСостояниеМЧД(Объект.Ссылка);
		ТехническийСтатус = ДанныеСостояния.ТехническийСтатус;
		Подписана = ДанныеСостояния.Подписана;
		Если ЗначениеЗаполнено(Объект.ФайлДоверенности) Тогда
			ЗаполнитьСписокПодписей();
		КонецЕсли;
	КонецЕсли;
	
	ПоказыватьПерсональныеДанные = ПоказыватьПерсональныеДанные();
	
	ЗагрузитьЗначенияВФорму();
	МашиночитаемыеДоверенностиФНССлужебный.УстановитьУсловноеОформление(ЭтотОбъект);
	ПрочитатьСостояние(ЭтотОбъект);
	
	ПрочитатьСостояниеВДругомРеестре();
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	Если Не ТолькоПросмотр Тогда
		ОбновитьСтатус();
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	Если Модифицированность Или Параметры.Ключ.Пустая() Тогда
		ОбновитьОбъект(ТекущийОбъект);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	СохранитьРезультатПроверкиПодписейНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
	
	Если ИспользуетсяАвтоНаименование Тогда
		Объект.Наименование = "";
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	ПрочитатьСостояниеВДругомРеестре();
	
	ПрочитатьРеквизиты(ТекущийОбъект);
	ИспользуетсяАвтоНаименование = ИспользуетсяАвтоНаименование(ТекущийОбъект);
	СохранитьРезультатПроверкиПодписей = Ложь;
	
	РазрешитьПередоверие = ТекущийОбъект.ВозможностьПередоверия = ПредопределенноеЗначение("Перечисление.ВозможностьПередоверияМЧД.ОднократноеПередоверие")
		Или ТекущийОбъект.ВозможностьПередоверия = ПредопределенноеЗначение("Перечисление.ВозможностьПередоверияМЧД.МногократноеПередоверие");
	
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
	
	ПрочитатьРеквизиты(ТекущийОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
	
	ОповеститьОЗаписи();
	ОбновитьСтатус();
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "РегистрацияОтмены" Тогда
		ОбновитьСтатус(Истина);
	ИначеЕсли ИмяСобытия = "Запись_СтатусМЧДВДругомРеестре" И Источник = Объект.Ссылка Тогда
		ПрочитатьСостояниеВДругомРеестре();
	ИначеЕсли Не СтрНачинаетсяС(ИмяСобытия, "Запись_") Тогда
		Возврат;
	КонецЕсли;
	
	Если ИмяСобытия = "Запись_Подпись" Тогда
		ЗаполнитьСписокПодписей();
		Возврат;
	КонецЕсли;
	
	Если РеквизитыНедоступныДляРедактирования Тогда
		ОбновитьОтображениеДанных();
		Возврат;
	КонецЕсли;
	
	ЭтоОбработкаОповещения = Истина;
	
	Если Доверитель = Источник Тогда
		ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыПриИзмененииДоверитель", 0.1, Истина);
	ИначеЕсли Представитель = Источник Тогда
		ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыПриИзмененииПредставитель", 0.1, Истина);
	ИначеЕсли ЛицоДоверителя = Источник Тогда
		ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыПриИзмененииЛицоДоверителя", 0.1, Истина);
	ИначеЕсли ЛицоПредставителя = Источник Тогда
		ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыПриИзмененииЛицоПредставителя", 0.1, Истина);
	ИначеЕсли ПредставительУправляющейКомпании = Источник Тогда
		ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыПриИзмененииПредставительУправляющейКомпании", 0.1, Истина);
	Иначе
		ЭтоОбработкаОповещения = Ложь;
	КонецЕсли;
	
	Если ЭтоОбработкаОповещения Тогда
		ОчиститьСообщения();
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ДатаОкончанияПриИзменении(Элемент)
	
	Просрочена = ЗначениеЗаполнено(Объект.ДатаОкончания) И КонецДня(Объект.ДатаОкончания) < ОбщегоНазначенияКлиент.ДатаСеанса();
	Если Просрочена Тогда
		ТехническийСтатус = ОбщегоНазначенияКлиент.ПредопределенныйЭлемент("Перечисление.ТехническиеСтатусыМЧД.Просрочена");
		ТребуетсяОбновлениеДекораций = Истина;
		ОтобразитьДекорацииСтатуса(ЭтотОбъект);
	Иначе
		ТехническийСтатус = ОбщегоНазначенияКлиент.ПредопределенныйЭлемент("Перечисление.ТехническиеСтатусыМЧД.Создание");
		ТребуетсяОбновлениеДекораций = Истина;
		ОтобразитьДекорацииСтатуса(ЭтотОбъект);
	КонецЕсли;
	
	УстановитьВидимостьИДоступность(ЭтотОбъект);

КонецПроцедуры

&НаКлиенте
Процедура ЭлементОрганизацияПриИзменении(Элемент)
	
	ОрганизацияПриИзменении(Элемент.Имя);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭлементОрганизацияОчистка(Элемент, СтандартнаяОбработка)
	
	ОрганизацияОчистка(Элемент.Имя, Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭлементОрганизацияНаименованиеОчистка(Элемент, СтандартнаяОбработка)
	
	ОрганизацияОчистка(СтрЗаменить(Элемент.Имя, "Наименование", ""), Элемент, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭлементОрганизацияНаименованиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	ЭлементОрганизацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭлементОрганизацияНаименованиеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ОчиститьСообщения();
	
	Если ВыбранноеЗначение <> Неопределено Тогда
		ИмяЭлемента = СтрЗаменить(Элемент.Имя, "Наименование", "");
		ЭтотОбъект[ИмяЭлемента] = ВыбранноеЗначение;
		ПодключитьОбработчикОжидания("ОбработчикОжиданияРеквизитыПриИзменении" + ИмяЭлемента, 0.1, Истина);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура РеквизитыПредставителяУправляющейОрганизации(Команда)
	
	ОткрытьФормуВводаРеквизитов("ПредставительУправляющейКомпании");

КонецПроцедуры

&НаКлиенте
Процедура РеквизитыЛицаПредставителя(Команда)
	
	ОткрытьФормуВводаРеквизитов("ЛицоПредставителя");
	
КонецПроцедуры

&НаКлиенте
Процедура ДляНалоговыхОргановПриИзменении(Элемент)
	
	УстановитьВидимостьИДоступность(ЭтотОбъект, Элемент.Имя);
	
КонецПроцедуры

&НаКлиенте
Процедура РегистрироватьВДругомРеестреПриИзменении(Элемент)
	
	ДоступностьПризнакаРегистрацииВРеестре(ЭтотОбъект);
	
	Если Не РегистрироватьВДругомРеестре Или РеквизитыНедоступныДляРедактирования
		Или Не ЗначениеЗаполнено(КодыПолномочийДляДобавления) Тогда
		Возврат;
	КонецЕсли;
	
	КодыПолномочий = ПолучитьИзВременногоХранилища(КодыПолномочийДляДобавления);
	Если Не ЗначениеЗаполнено(КодыПолномочий.КодыПолномочийДляДобавления) Тогда
		Возврат;
	КонецЕсли;
	
	ПолномочияПоКодам = ПолномочияПоКодам(КодыПолномочий.КодыПолномочийДляДобавления);
	НеНайдено = Новый Массив;
	Для Каждого Полномочие Из ПолномочияПоКодам Цикл
		Если Объект.Полномочия.НайтиСтроки(Новый Структура("Код", Полномочие.Код)).Количество() = 0 Тогда
			НеНайдено.Добавить(Полномочие);
		Иначе
			НеНайдено.Очистить();
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Если НеНайдено.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Контекст = Новый Структура;
	Контекст.Вставить("ТекстПолномочий", "");
	Контекст.Вставить("ПолномочияВТекстовомВиде", Ложь);
	Контекст.Вставить("Полномочия", НеНайдено);
	Контекст.Вставить("ОграниченияПолномочий", Новый Массив);
	
	ТекстВопроса = КодыПолномочий.ТекстВопросаДляДобавленияПолномочий;

	Если Не ЗначениеЗаполнено(ТекстВопроса) Тогда
		ТекстВопроса = НСтр("ru='Для регистрации доверенность должна содержать соответствующие полномочия.
		|
		|Добавить?'");
	КонецЕсли;
	
	ПараметрыВопросаПользователю = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
	ПараметрыВопросаПользователю.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
	ПараметрыВопросаПользователю.Заголовок = НСтр("ru='Добавление полномочий'");
	
	Кнопки = Новый СписокЗначений;
	Кнопки.Добавить(КодВозвратаДиалога.Да,  НСтр("ru = 'Добавить'"));
	Кнопки.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Нет'"));
	
	СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Новый ОписаниеОповещения("ПослеОтветаНаВопросОДобавленииПолномочий", ЭтотОбъект, Контекст),
		ТекстВопроса, Кнопки, ПараметрыВопросаПользователю);
	
КонецПроцедуры

&НаКлиенте
Процедура КодНалоговогоОрганаПредставленияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Истина;

	Оповещение = Новый ОписаниеОповещения("ПослеВводаКодаНалоговогоОргана", ЭтотОбъект);
	МашиночитаемыеДоверенностиФНСКлиентПереопределяемый.ПриНачалеВыбораКодаНалоговогоОргана(ОрганизацииДоверители(),
		Оповещение, СтандартнаяОбработка);
	
	Если СтандартнаяОбработка Тогда
		ПоказатьВводСтроки(Оповещение, Объект.КодНалоговогоОрганаПредставления,
			НСтр("ru='Введите код налогового органа'"), 4);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДекорацияНалоговыеОрганыДействияНажатие(Элемент)

	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Организации", ОрганизацииДоверители());
	ПараметрыФормы.Вставить("КодыНалоговыхОргановДействия", Новый Массив);
	Для каждого НалоговыйОрганДействия Из Объект.НалоговыеОрганыДействия Цикл
		ПараметрыФормы.КодыНалоговыхОргановДействия.Добавить(НалоговыйОрганДействия.КодНалоговогоОргана);
	КонецЦикла;
	ПараметрыФормы.Вставить("ТолькоПросмотрФормы", РеквизитыНедоступныДляРедактирования);

	ОписаниеОповещения = Новый ОписаниеОповещения("ДекорацияНалоговыеОрганыДействияНажатиеПослеВвода", ЭтотОбъект);
	ОткрытьФорму(
		"Справочник.МашиночитаемыеДоверенности.Форма.ФормаВводаНалоговыхОрганов",
		Новый Структура("СтруктураДанных", ПараметрыФормы),
		ЭтотОбъект,,,,
		ОписаниеОповещения,
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура ДекорацияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Массив = СтрРазделить(НавигационнаяСсылкаФорматированнойСтроки, ":");
	ОткрытьФормуВводаРеквизитов(Массив[0], Массив[1]);

КонецПроцедуры

&НаКлиенте
Процедура ОрганизацияОткрытие(Элемент, СтандартнаяОбработка)
	
	ЭтоПолеНаименование = СтрНайти(Элемент.Имя, "Наименование") <> 0;
	Если РеквизитыНедоступныДляРедактирования Или ЭтоПолеНаименование Тогда
		
		СтандартнаяОбработка = Ложь;
		ИмяЭлемента = СтрЗаменить(Элемент.Имя, "Наименование", "");
		
		Если ЭтоПолеНаименование И ЗначениеЗаполнено(ЭтотОбъект[ИмяЭлемента]) Тогда
			ПоказатьЗначение(,ЭтотОбъект[ИмяЭлемента]);
		Иначе
			ОткрытьФормуВводаРеквизитов(ИмяЭлемента);
		КонецЕсли;
	
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДекорацияПолномочияПредставителяНажатие(Элемент)
	
	СтандартнаяОбработка = Истина;
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВводаПолномочий", ЭтотОбъект);
	
	МашиночитаемыеДоверенностиФНСКлиентПереопределяемый.ПриНачалеВыбораПолномочий(
		ОписаниеОповещения, СтандартнаяОбработка);
	
	Если СтандартнаяОбработка = Истина Тогда
		
		СтруктураДанных = Новый Структура;
		СтруктураДанных.Вставить("ТекстПолномочий", Объект.ТекстПолномочий);
		СтруктураДанных.Вставить("ПолномочияВТекстовомВиде", Объект.ПолномочияВТекстовомВиде);
		СтруктураДанных.Вставить("Полномочия");
		Если Объект.Полномочия.Количество() > 0 Тогда
			СтруктураДанных.Полномочия = АдресПолномочий();
		КонецЕсли;

		ОткрытьФорму(
			"Справочник.МашиночитаемыеДоверенности.Форма.ФормаВводаПолномочий",
			Новый Структура("ТолькоПросмотр, ВыбранныеПолномочия", РеквизитыНедоступныДляРедактирования, СтруктураДанных),
			ЭтотОбъект,,,,
			ОписаниеОповещения,
			РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОписаниеСостоянияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь; 
	
	Если НавигационнаяСсылкаФорматированнойСтроки = "Обновить" Тогда
		ОбновитьСтатус(Истина);
	ИначеЕсли НавигационнаяСсылкаФорматированнойСтроки = "ПоказатьОшибку"
		И ЭтоАдресВременногоХранилища(АдресОшибкиСтатуса) Тогда
		ОшибкаСтатуса = ПолучитьИзВременногоХранилища(АдресОшибкиСтатуса);
		КонтекстОшибки = МашиночитаемыеДоверенностиФНССлужебныйКлиент.КонтекстДляОбработкиОшибкиРР();
		КонтекстОшибки.ЗаголовокПредупреждения = ОшибкаСтатуса.ЗаголовокОшибки;
		КонтекстОшибки.Форма = ЭтотОбъект;
		МашиночитаемыеДоверенностиФНССлужебныйКлиент.ОбработатьОшибкуВзаимодействияРР(ОшибкаСтатуса, КонтекстОшибки);
	КонецЕсли;
	
	УстановитьВидимостьИДоступность(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ДругойРеестрОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	МашиночитаемыеДоверенностиФНСКлиентПереопределяемый.ПриОбработкеНавигационнойСсылки(ЭтотОбъект,
		НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
	
	ИспользуетсяАвтоНаименование = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура РегистрироватьВРеестреПриИзменении(Элемент)
	Если Не Параметры.Ключ.Пустая() Тогда
		РассчитатьТехническийСтатус(Неопределено, Ложь);
		ДоступностьПризнакаРегистрацииВРеестре(ЭтотОбъект);
	КонецЕсли;
	Если ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Создание")
		Или ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Подписание") Тогда
		ТребуетсяОбновлениеДекораций = Истина;
		ОтобразитьДекорацииСтатуса(ЭтотОбъект);
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ФлажокВозможностьПередоверияПриИзменении(Элемент)
	
	Элементы.ВозможностьПередоверия.Видимость = РазрешитьПередоверие;
		
	Если РазрешитьПередоверие 
		И (Объект.ВозможностьПередоверия = ПредопределенноеЗначение("Перечисление.ВозможностьПередоверияМЧД.БезПередоверия")
		Или Объект.ВозможностьПередоверия.Пустая()) Тогда
		Объект.ВозможностьПередоверия = ПредопределенноеЗначение("Перечисление.ВозможностьПередоверияМЧД.ОднократноеПередоверие");
	Иначе
		Объект.ВозможностьПередоверия = ПредопределенноеЗначение("Перечисление.ВозможностьПередоверияМЧД.БезПередоверия");
	КонецЕсли;

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыЭлектронныеПодписи

&НаКлиенте
Процедура ЭлектронныеПодписиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ЭлектроннаяПодписьКлиент.ОткрытьПодпись(Элементы.ЭлектронныеПодписи.ТекущиеДанные);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаПредставительНесколько

&НаКлиенте
Процедура ТаблицаПредставительНесколькоВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ТекущиеДанные = Элементы.ТаблицаПредставительНесколько.ТекущиеДанные;
	ПредставительИдентификатор = ТекущиеДанные.ПредставительИдентификатор;
	ЛицоПредставителяИдентификатор = ТекущиеДанные.ЛицоПредставителяИдентификатор;
	
	СтрокаПредставитель = Объект.Представители.НайтиСтроки(
		Новый Структура("Идентификатор",
		ПредставительИдентификатор))[0];
	
	ПараметрыФормы = МашиночитаемыеДоверенностиФНССлужебныйКлиент.ПараметрыФормыВводаРеквизитов(СтрокаПредставитель.Представитель,
		ПолучитьИзВременногоХранилища(СтрокаПредставитель.АдресРеквизитов), РеквизитыНедоступныДляРедактирования, Истина);
		
	Если ЗначениеЗаполнено(ЛицоПредставителяИдентификатор) Тогда
		СтрокаЛицоПредставителя = Объект.Представители.НайтиСтроки(Новый Структура("Идентификатор",
		ЛицоПредставителяИдентификатор))[0];
		Структура = Новый Структура("Идентификатор, Представитель, АдресРеквизитов");
		ЗаполнитьЗначенияСвойств(Структура, СтрокаЛицоПредставителя);
		ПараметрыФормы.Представители.Добавить(Структура);
	КонецЕсли;
	
	МашиночитаемыеДоверенностиФНССлужебныйКлиент.ОткрытьФормуВводаРеквизитов(ЭтотОбъект,
		ПараметрыФормы, Новый ОписаниеОповещения("ДобавитьВТаблицуПредставителя", ЭтотОбъект,
		Новый Структура("ИмяЭлементаОрганизация, ИдентификаторРодителя, Идентификатор",
		"Представитель", Неопределено, ПредставительИдентификатор)));
	
КонецПроцедуры

&НаКлиенте
Процедура ТаблицаПредставительНесколькоПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	Отказ = Истина;
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ВыборТипаДоверителя(Команда)

	ВыборТипаОрганизации("Доверитель");

КонецПроцедуры

&НаКлиенте
Процедура ВыборТипаЛицаДоверителя(Команда)
	
	ВыборТипаОрганизации("ЛицоДоверителя");

КонецПроцедуры

&НаКлиенте
Процедура ВыборТипаПредставителя(Команда)
	
	ВыборТипаОрганизации("Представитель");
	
КонецПроцедуры

&НаКлиенте
Процедура РеквизитыПредставителя(Команда)
	
	ОткрытьФормуВводаРеквизитов("Представитель");

КонецПроцедуры

&НаКлиенте
Процедура РеквизитыДоверителя(Команда)
	
	ОткрытьФормуВводаРеквизитов("Доверитель");
	
КонецПроцедуры

&НаКлиенте
Процедура РеквизитыЛицаДоверителя(Команда)
	
	ОткрытьФормуВводаРеквизитов("ЛицоДоверителя");
	
КонецПроцедуры

&НаКлиенте
Процедура Подписать(Команда)
	
	ОчиститьСообщения();
	
	Если Не ОбновитьСформироватьФайлДоверенности() Тогда
		Возврат;
	КонецЕсли;
	
	СтандартнаяОбработка = Истина;
	Оповещение = Новый ОписаниеОповещения("ПослеПодписанияДоверенности", ЭтотОбъект);
	МашиночитаемыеДоверенностиФНСКлиентПереопределяемый.ПриНачалеПодписания(ОрганизацииДоверители(), 
		Объект.ФайлДоверенности, Объект.Полномочия, Оповещение, СтандартнаяОбработка);
	
	Если СтандартнаяОбработка Тогда
		
		ДанныеФайла = ДанныеФайла(Объект.ФайлДоверенности, УникальныйИдентификатор);
		
		ОписаниеДанных = Новый Структура;
		ОписаниеДанных.Вставить("Операция", НСтр("ru='Подписание доверенности'"));
		ОписаниеДанных.Вставить("ЗаголовокДанных", НСтр("ru='Доверенность'"));
		ОписаниеДанных.Вставить("Данные", ДанныеФайла.СсылкаНаДвоичныеДанныеФайла);
	
		ЭлектроннаяПодписьКлиент.Подписать(ОписаниеДанных, ЭтотОбъект, Оповещение);
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура Отправить(Команда)
	
	Если Подписана Тогда
		РегистрироватьВФНС = ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Подписана");
		ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьРегистрациюДоверенности", ЭтотОбъект, РегистрироватьВФНС);
		
		СтандартнаяОбработка = Истина;
		
		Если РегистрироватьВДругомРеестре И Не ЗарегистрированаВДругомРеестре Тогда
			МашиночитаемыеДоверенностиФНСКлиентПереопределяемый.ПриРегистрацииДоверенности(
				Объект.Ссылка, СтандартнаяОбработка, ОписаниеОповещения);
		КонецЕсли;
		
		Если СтандартнаяОбработка Тогда
			ПродолжитьРегистрациюДоверенности(Неопределено, РегистрироватьВФНС);
		КонецЕсли;
	Иначе
		ПоказатьПредупреждение(, НСтр("ru='Доверенность не подписана всеми доверителями.'"));
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыгрузитьВФайл(Команда)
	
	ОчиститьСообщения();
	
	Если Не ОбновитьСформироватьФайлДоверенности() Тогда
		Возврат;
	КонецЕсли;
		
	МашиночитаемыеДоверенностиФНССлужебныйКлиент.ВыгрузитьДоверенностьВФайл(Объект.Ссылка);
		
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьПредставителя(Команда)
	
	Добавить("Представитель", "ПредставительДобавить");
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьЛицаПредставителя(Команда)
	
	Добавить("ЛицоПредставителя", "ЛицоПредставителяДобавить");
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьПредставителяВТаблицу(Команда)
	
	Если ПредставительНесколько Тогда
		Добавить("Представитель", "ПредставительВыборТипа1");
	Иначе
		Добавить("ЛицоПредставителя", "ПредставительВыборТипа1");
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура Удалить(Команда)
	
	ТекущиеДанные = Элементы.ТаблицаПредставительНесколько.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ТекущиеДанные.ЛицоПредставителяИдентификатор) Тогда
		УдалитьСтрокуДоверителейПредставителей(Объект.Представители, ТекущиеДанные.ЛицоПредставителяИдентификатор, Истина);
	ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные.ПредставительИдентификатор) Тогда
		УдалитьСтрокуДоверителейПредставителей(Объект.Представители, ТекущиеДанные.ПредставительИдентификатор, Истина);
	КонецЕсли;
	
	СформироватьТаблицуНесколькоПредставителей();
	УстановитьВидимостьИДоступность(ЭтотОбъект, "ПредставительНесколько");
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьПодписьИзФайла(Команда)
	
	Если Не ЗначениеЗаполнено(Объект.ФайлДоверенности) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю( НСтр("ru='Не сформирован файл доверенности.'"));
		Возврат;
	КонецЕсли;
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеДобавленияПодписи", ЭтотОбъект);
	ЭлектроннаяПодписьКлиент.ДобавитьПодписьИзФайла(Новый Структура("Объект", ОписаниеОповещения));
	
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьПодпись(Команда)
	
	ВыделенныеСтроки = Элементы.ЭлектронныеПодписи.ВыделенныеСтроки;
	Если ВыделенныеСтроки.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	ДанныеФайла = ДанныеФайла(Объект.ФайлДоверенности, УникальныйИдентификатор);
	
	РаботаСФайламиСлужебныйКлиент.ПроверитьПодписи(ЭтотОбъект,
		ДанныеФайла.СсылкаНаДвоичныеДанныеФайла,
		Элементы.ЭлектронныеПодписи.ВыделенныеСтроки, ДанныеФайла);
	
	Если Элементы.ФормаЗаписатьИЗакрыть.Видимость И Элементы.ФормаЗаписатьИЗакрыть.Доступность Тогда
		Модифицированность = Истина;
		СохранитьРезультатПроверкиПодписей = Истина;
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ПроверитьДоверенность(Команда)
	
	Если ЭлектронныеПодписи.Количество() = 0 Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Доверенность не подписана.'"));
		Возврат;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Объект.ФайлДоверенности) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не найден файл доверенности.'"));
		Возврат;
	КонецЕсли;
	
	СтандартнаяОбработка = Истина;
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеПроверкиДоверенности", ЭтотОбъект);
	МашиночитаемыеДоверенностиФНСКлиентПереопределяемый.ПриПроверкеДоверенности(ОписаниеОповещения, Объект.Ссылка, 
		УникальныйИдентификатор, СтандартнаяОбработка);
	Если СтандартнаяОбработка Тогда
		МашиночитаемыеДоверенностиФНСКлиент.ПроверитьДоверенность(ОписаниеОповещения,
			Объект.Ссылка, УникальныйИдентификатор);
	КонецЕсли;
		
КонецПроцедуры

&НаКлиенте
Процедура ДоверенностьПроверенаВручную(Команда)
	
	Если Объект.СтатусВернаУстановленВручную Тогда
		
		ОчиститьРезультатыПроверки();
		
	Иначе
		Объект.СтатусВернаУстановленВручную = Истина;
		Объект.Верна = Истина;
		Объект.УстановившийСтатусВерна = ПользователиКлиент.ТекущийПользователь();
		Объект.ДатаПроверки = ОбщегоНазначенияКлиент.ДатаСеанса();
		Модифицированность = Истина;
		ОтобразитьДекорациюВерна(ЭтотОбъект);
	КонецЕсли;

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция ПоказыватьПерсональныеДанные()
	
	ТекущийПользователь = Пользователи.ТекущийПользователь();
	Если Объект.Ответственный = ТекущийПользователь Тогда
		Возврат Истина;
	КонецЕсли;
	
	ФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийПользователь, "ФизическоеЛицо");
	Если ЗначениеЗаполнено(ФизическоеЛицо) Тогда
		Если Объект.Доверители.НайтиСтроки(Новый Структура("Доверитель", ФизическоеЛицо)).Количество() > 0 Тогда
			Возврат Истина;
		КонецЕсли;
		Если Объект.Представители.НайтиСтроки(Новый Структура("Представитель", ФизическоеЛицо)).Количество() > 0 Тогда
			Возврат Истина;
		КонецЕсли;
	КонецЕсли;
	
	Возврат Ложь;
	
КонецФункции

&НаКлиенте
Процедура ПослеОтветаНаВопросОДобавленииПолномочий(Результат, Контекст) Экспорт
	
	Если Результат = Неопределено Или Результат.Значение <> КодВозвратаДиалога.Да Тогда
		Возврат;
	КонецЕсли;
	
	ЗаполнитьПолномочия(Контекст, ЭтотОбъект, Истина);
		
	Если Не Параметры.Ключ.Пустая() Тогда
		Модифицированность = Истина;
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ОчиститьРезультатыПроверки()
	
	Объект.СтатусВернаУстановленВручную = Ложь;
	Объект.Верна = Ложь;
	Объект.УстановившийСтатусВерна = Неопределено;
	Объект.ДатаПроверки = Неопределено;
	Модифицированность = Истина;
	ОтобразитьДекорациюВерна(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеПроверкиДоверенности(РезультатПроверкиДоверенности, ДополнительныеПараметры) Экспорт
	
	ОчиститьСообщения();
	ОчиститьРезультатыПроверки();
	СохранитьРезультатПроверкиПодписей = Ложь;
	
	Объект.Верна = РезультатПроверкиДоверенности.Верна;
	Объект.ДатаПроверки = ОбщегоНазначенияКлиент.ДатаСеанса();
	
	Если Не Объект.Верна Тогда
		Элементы.ГруппаЭлектронныеПодписи.Показать();
	КонецЕсли;
	
	Если РезультатПроверкиДоверенности.ЕстьВсеПодписи <> Подписана Тогда
		РассчитатьТехническийСтатус(РезультатПроверкиДоверенности.ЕстьВсеПодписи);
	КонецЕсли;
	
	Для Каждого РезультатПроверкиПодписи Из РезультатПроверкиДоверенности.РезультатыПроверкиПодписей Цикл
		
		РезультатПроверки = РезультатПроверкиПодписи.РезультатПроверки;
		
		Если РезультатПроверки = Неопределено
			И ПустаяСтрока(РезультатПроверкиПодписи.ТекстОшибки)
			И ПустаяСтрока(РезультатПроверкиПодписи.ТекстОшибкиСоответствия) Тогда
			Продолжить;
		КонецЕсли;
		
		Строка = ЭлектронныеПодписи.НайтиСтроки(Новый Структура("ИдентификаторПодписи", РезультатПроверкиПодписи.ИдентификаторПодписи))[0];
		Строка.ОписаниеОшибки = "";
		
		Если РезультатПроверки <> Неопределено Тогда
			Строка.ПодписьВерна = РезультатПроверки.Результат = Истина;
			Строка.СрокДействияПоследнейМеткиВремени = РезультатПроверки.СрокДействияПоследнейМеткиВремени;
			Строка.ТипПодписи = РезультатПроверки.ТипПодписи;
			Строка.ТребуетсяПроверка = РезультатПроверки.ТребуетсяПроверка;
			Строка.ДатаПроверкиПодписи = Объект.ДатаПроверки;
		КонецЕсли;
		
		Ошибки = Новый Массив;
		Если Не ПустаяСтрока(РезультатПроверкиПодписи.ТекстОшибки)Тогда
			Ошибки.Добавить(РезультатПроверкиПодписи.ТекстОшибки);
		КонецЕсли;
		Если Не ПустаяСтрока(РезультатПроверкиПодписи.ТекстОшибкиСоответствия)Тогда
			Ошибки.Добавить(РезультатПроверкиПодписи.ТекстОшибкиСоответствия);
		КонецЕсли;
		Если Ошибки.Количество() > 0 Тогда
			Строка.ОписаниеОшибки = СтрСоединить(Ошибки, Символы.ПС);
		КонецЕсли;
		
		Строка.Статус = СтатусПодписи(Строка, Объект.ДатаПроверки);
		СохранитьРезультатПроверкиПодписей = Истина;
		
	КонецЦикла;
	
	Если СохранитьРезультатПроверкиПодписей Тогда
		Элементы.ЭлектронныеПодписи.Обновить();
	КонецЕсли;
	
	Если ЗначениеЗаполнено(РезультатПроверкиДоверенности.ОписаниеОшибок) Тогда
		ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме(
			НСтр("ru='Проверка доверенности'"), "", РезультатПроверкиДоверенности.ОписаниеОшибок, Новый Структура);
	КонецЕсли;
	
	ОтобразитьДекорациюВерна(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура РассчитатьТехническийСтатус(ЕстьВсеПодписи, ЗаписыватьИзменения = Истина)
	
	ТехническийСтатусБыло = ТехническийСтатус;
	ТехническийСтатус = МашиночитаемыеДоверенностиФНССлужебный.РассчитатьТехническийСтатус(
		РеквизитФормыВЗначение("Объект"), ЕстьВсеПодписи, ЗаписыватьИзменения);
	Если ТехническийСтатусБыло <> ТехническийСтатус Тогда
		ТребуетсяОбновлениеДекораций = Истина;
		Объект.Статус = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РасчетныйСтатусДокумента(ТехническийСтатус, Объект.Верна);
		УстановитьВидимостьИДоступность(ЭтотОбъект);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура СохранитьРезультатПроверкиПодписейНаСервере()
	
	Если СохранитьРезультатПроверкиПодписей Тогда
		РаботаСФайламиСлужебный.ПеренестиРезультатыПроверкиПодписей(ЭлектронныеПодписи, Объект.ФайлДоверенности);
		СохранитьРезультатПроверкиПодписей = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено)
	
	ПараметрыДанныхФайла = РаботаСФайламиКлиентСервер.ПараметрыДанныхФайла();
	ПараметрыДанныхФайла.ПолучатьСсылкуНаДвоичныеДанные = Истина;
	ПараметрыДанныхФайла.ИдентификаторФормы = ИдентификаторФормы;
	Возврат РаботаСФайлами.ДанныеФайла(ПрисоединенныйФайл, ПараметрыДанныхФайла);
	
КонецФункции

&НаКлиенте
Процедура Добавить(ИмяЭлементаОрганизация, ИмяЭлементаДляДобавления)
	
	Если ИмяЭлементаОрганизация = "ЛицоПредставителя" Тогда
		
		Реквизиты = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
			"ФизическоеЛицо", Неопределено, "ДолжностноеЛицо", Истина);
		
		ПараметрыФормы = МашиночитаемыеДоверенностиФНССлужебныйКлиент.ПараметрыФормыВводаРеквизитов(Неопределено,
			Реквизиты, РеквизитыНедоступныДляРедактирования, Истина);
			ПараметрыФормы.Представители = Новый Массив;
		
		МашиночитаемыеДоверенностиФНССлужебныйКлиент.ОткрытьФормуВводаРеквизитов(ЭтотОбъект,
			ПараметрыФормы, Новый ОписаниеОповещения("ДобавитьВТаблицуПредставителя", ЭтотОбъект,
			Новый Структура("ИмяЭлементаОрганизация, ИдентификаторРодителя, Идентификатор",
				ИмяЭлементаОрганизация, ПредставительИдентификатор, Неопределено)));
	Иначе
		ВыборТипаОрганизации(ИмяЭлементаОрганизация, ИмяЭлементаДляДобавления);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьПолномочияПоКодам(КодыПолномочий)
	
	МассивПолномочий = ПолномочияПоКодам(КодыПолномочий);
	
	Результат = Новый Структура;
	Результат.Вставить("ТекстПолномочий", "");
	Результат.Вставить("ПолномочияВТекстовомВиде", Ложь);
	Результат.Вставить("Полномочия", МассивПолномочий);
	Результат.Вставить("ОграниченияПолномочий", Новый Массив);
	ЗаполнитьПолномочия(Результат, ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Функция ПолномочияПоКодам(КодыПолномочий)
	Возврат МашиночитаемыеДоверенностиФНССлужебный.ПолномочияПоКодам(КодыПолномочий);
КонецФункции

&НаКлиенте
Процедура ПослеВводаПолномочий(Результат, ДополнительныеПараметры) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ЗаполнитьПолномочия(Результат, ЭтотОбъект);
		
	Если Не Параметры.Ключ.Пустая() Тогда
		Модифицированность = Истина;
	КонецЕсли;
	
	ПрочитатьСостояниеВДругомРеестре();

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьПолномочия(Результат, Форма, Добавить = Ложь)
	
	Объект = Форма.Объект;
	
	Объект.ТекстПолномочий = Результат.ТекстПолномочий;
	Объект.ПолномочияВТекстовомВиде = Результат.ПолномочияВТекстовомВиде;
	
	Если Не Добавить Тогда
		Объект.Полномочия.Очистить();
		Объект.Ограничения.Очистить();
	КонецЕсли;
	ЕстьПолномочияДляНалоговыхОрганов = Ложь;
	
	Если Не Объект.ПолномочияВТекстовомВиде Тогда
		
		Для Каждого Полномочие Из Результат.Полномочия Цикл
			
			НоваяСтрока = Объект.Полномочия.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Полномочие);
			Если Не ЕстьПолномочияДляНалоговыхОрганов
				И МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ЭтоПолномочиеФНС(НоваяСтрока.Код) Тогда
				ЕстьПолномочияДляНалоговыхОрганов = Истина;
			КонецЕсли;
			
		КонецЦикла;
		
		Для Каждого Ограничение Из Результат.ОграниченияПолномочий Цикл
			
			НоваяСтрока = Объект.Ограничения.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, Ограничение);
			
		КонецЦикла;
		
	КонецЕсли;
	
	Если Объект.ДляНалоговыхОрганов <> ЕстьПолномочияДляНалоговыхОрганов Тогда
		Объект.ДляНалоговыхОрганов = ЕстьПолномочияДляНалоговыхОрганов;
		Если Объект.ДляНалоговыхОрганов Тогда
			Объект.ИныеСведения = "";
		КонецЕсли;
		УстановитьВидимостьИДоступность(Форма, "ДляНалоговыхОрганов");
	КонецЕсли;
	
	СформироватьЗаголовокПолномочий(Форма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВводаКодаНалоговогоОргана(Результат, ДополнительныеПараметры) Экспорт
	
	Объект.КодНалоговогоОрганаПредставления = Результат;
	
КонецПроцедуры

&НаСервере
Функция ЗаполнениеПроверено()
	
	Отказ = Не ПроверитьЗаполнение();
	
	Если ЗначениеЗаполнено(Объект.ДатаОкончания) Тогда
		Если Объект.ДатаОкончания < Объект.ДатаВыдачи Тогда
			ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Дата окончания действия меньше даты выдачи.'"),,,"Объект.ДатаОкончания",Отказ);
		КонецЕсли;
		
		Если Объект.ДатаОкончания < НачалоДня(ТекущаяДатаСеанса()) Тогда
			ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Дата окончания истекла.'"),,"Объект.ДатаОкончания",,Отказ);
		КонецЕсли;
	КонецЕсли;
	
	Если Объект.ПолномочияВТекстовомВиде И ПустаяСтрока(Объект.ТекстПолномочий)
		Или Не Объект.ПолномочияВТекстовомВиде И Объект.Полномочия.Количество() = 0 Тогда
		ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не заполнены полномочия.'"),,,,Отказ);
	КонецЕсли;
	
	Если СтрДлина(Объект.ИныеСведения) > 5000 Тогда
		ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Иные сведения не должны превышать 5000 символов.'"),,,"Объект.ИныеСведения", Отказ);
	КонецЕсли;
	
	Если Объект.Доверители.Количество() = 0 Тогда
		ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не указан доверитель.'"));
		Возврат Ложь;
	КонецЕсли;
	
	Если Объект.Представители.Количество() = 0 Тогда
		ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Не указан представитель.'"));
		Возврат Ложь;
	КонецЕсли;
	
	Для Каждого Строка Из Объект.Доверители Цикл
		
		РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов);
		
		
		Если Не РеквизитыОрганизации.ЭтоФизическоеЛицо Тогда
			ШаблонОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Организация %1 - %2'"),
				Строка.Доверитель, " %1: ");
		Иначе
			ШаблонОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Физическое лицо %1 - %2'"),
				Строка.Доверитель, " %1: ");
		КонецЕсли;
		
		Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда
			Поле = "Доверитель";
		Иначе
			Поле = "ЛицоДоверителя";
		КонецЕсли;
		
		Если Не МашиночитаемыеДоверенностиФНССлужебный.ПроверитьСведенияОбОрганизации(
			ЭтотОбъект, Поле, ШаблонОшибки, РеквизитыОрганизации) Тогда
			
			Отказ = Истина;
		КонецЕсли;
		
	КонецЦикла;
	
	Для Каждого Строка Из Объект.Представители Цикл
		
		РеквизитыОрганизации = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов);
		
		Если Не ЗначениеЗаполнено(Строка.ИдентификаторРодителя) Тогда
			Поле = "Представитель";
		Иначе
			Поле = "ЛицоПредставителя";
		КонецЕсли;

		ШаблонСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Представитель %1 - %2'"), 
			Строка.Представитель, " %1:");
		Если Не МашиночитаемыеДоверенностиФНССлужебный.ПроверитьСведенияОбОрганизации(ЭтотОбъект, Поле, ШаблонСообщения, 
			РеквизитыОрганизации) Тогда
			Отказ = Истина;
		КонецЕсли;
		
	КонецЦикла;

	Возврат Не Отказ;
	
КонецФункции

&НаКлиенте
Процедура ДекорацияНалоговыеОрганыДействияНажатиеПослеВвода(
		СтруктураДанных,
		ДополнительныеПараметры) Экспорт
	
	Если СтруктураДанных = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Объект.НалоговыеОрганыДействия.Очистить();
	Для каждого КодНалоговогоОрганаДействия Из СтруктураДанных.КодыНалоговыхОргановДействия Цикл
		НалоговыйОрганДействия = Объект.НалоговыеОрганыДействия.Добавить();
		НалоговыйОрганДействия.КодНалоговогоОргана = КодНалоговогоОрганаДействия;
	КонецЦикла;
	
	Модифицированность = Истина;
	
	УстановитьВидимостьИДоступность(ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеПодписанияДоверенности(Результат, ДополнительныеПараметры) Экспорт
	
	Отказ = Ложь;
	Если Результат.Успех Тогда
		
		Если ТипЗнч(Результат.СвойстваПодписи) = Тип("Структура") Тогда
			СвойстваПодписи = Результат.СвойстваПодписи;
		Иначе
			СвойстваПодписи = ПолучитьИзВременногоХранилища(Результат.СвойстваПодписи);
		КонецЕсли;
	
		Если Не СвойстваПодписи.ПодписьВерна 
			И СвойстваПодписи.ТребуетсяПроверка = Ложь Тогда
			
			ТекстОшибки = НСтр("ru='Сертификат подписи не прошел проверку.'");
			ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки,,,,Отказ);
			
		КонецЕсли;
			
		Ошибки = ДобавитьПодпись(СвойстваПодписи);
		
		Если Ошибки.Количество() > 0 Тогда
			Ошибка = Новый Структура("ОписаниеОшибки", СтрСоединить(Ошибки, Символы.ПС));
			ПараметрыОшибки = Новый Структура;
			ПараметрыОшибки.Вставить("Подпись", СвойстваПодписи.Подпись);
			ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме(
				НСтр("ru = 'Не удалось добавить подпись по причине'"), "", Ошибка, Новый Структура);
		Иначе
			ОбновитьСтатусПослеПодписания();
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьСтатусПослеПодписания()
	
	ОбновитьСтатус();
	Если Подписана Тогда
		КоличествоВерныхПодписей = ЭлектронныеПодписи.НайтиСтроки(Новый Структура("ПодписьВерна", Истина)).Количество();
		Если КоличествоВерныхПодписей > 0 И КоличествоВерныхПодписей = ЭлектронныеПодписи.Количество() Тогда
			ОчиститьРезультатыПроверки();
			Объект.Верна = Истина;
			Объект.ДатаПроверки = ОбщегоНазначенияКлиент.ДатаСеанса();
			ОбновитьОбъект();
			ОповеститьОбИзменении(Объект.Ссылка);
			ОтобразитьДекорациюВерна(ЭтотОбъект);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура СформироватьТаблицуНесколькоПредставителей(Знач ИдентификаторРодителя = Неопределено);
	
	ТаблицаПредставительНесколько.Очистить();
	
	Строки = Объект.Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", 
		Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
		
	Если Строки.Количество() > 1 Тогда
		ПредставительНесколько = Истина;
		ЛицоПредставителяНесколько = Ложь;
	Иначе
		ПредставительНесколько = Ложь;
		ЛицоПредставителяНесколько = Ложь;
	КонецЕсли;
		
	Для Каждого Строка Из Строки Цикл
		
		Если ИдентификаторРодителя <> Неопределено И ИдентификаторРодителя <> Строка.Идентификатор Тогда
			Продолжить;
		КонецЕсли;
		
		ЗаголовокДекорацииТаблицы = ЗаголовокДекорацииТаблицы(ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов));
		
		СтрокиФЛ = Объект.Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", Строка.Идентификатор));
		
		Если СтрокиФЛ.Количество() = 0 Тогда
			НоваяСтрока = ТаблицаПредставительНесколько.Добавить();
			НоваяСтрока.Представитель              = ЗаголовокДекорацииТаблицы.Представление;
			НоваяСтрока.НеЗаполненыРеквизиты       = ЗаголовокДекорацииТаблицы.НеЗаполненыРеквизиты;
			НоваяСтрока.ПредставительИдентификатор = Строка.Идентификатор;
		Иначе
			
			Если СтрокиФЛ.Количество() > 1 И Не ПредставительНесколько Тогда
				ЛицоПредставителяНесколько = Истина;
			КонецЕсли;
			
			Для Каждого СтрокаФЛ Из СтрокиФЛ Цикл
				
				НоваяСтрока = ТаблицаПредставительНесколько.Добавить();
				НоваяСтрока.Представитель = ЗаголовокДекорацииТаблицы.Представление;
				НоваяСтрока.ПредставительИдентификатор   = Строка.Идентификатор;
				НоваяСтрока.ЛицоПредставителяИдентификатор = СтрокаФЛ.Идентификатор;
				
				ЗаголовокДекорацииТаблицы2 = ЗаголовокДекорацииТаблицы(ПолучитьИзВременногоХранилища(СтрокаФЛ.АдресРеквизитов));
				НоваяСтрока.ЛицоПредставителя = ЗаголовокДекорацииТаблицы2.Представление;
				НоваяСтрока.НеЗаполненыРеквизитыФЛ = ЗаголовокДекорацииТаблицы2.НеЗаполненыРеквизиты;
			
			КонецЦикла;
		КонецЕсли;
		
	КонецЦикла;
	
	Если Не ПредставительНесколько И Не ЛицоПредставителяНесколько Тогда
		ЗагрузитьПредставителяИзСтроки(Строки[0].Идентификатор);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеДобавленияПодписи(Результат, Контекст) Экспорт
	
	Ошибки = ДобавитьПодпись(Результат.ОписаниеДанных.Подписи);
	
	Если Ошибки.Количество() > 0 Тогда
		Ошибка = СтрСоединить(Ошибки, Символы.ПС);
		ВыполнитьОбработкуОповещения(Результат.Оповещение, Новый Структура("ОписаниеОшибки", Ошибка));
	Иначе
		ВыполнитьОбработкуОповещения(Результат.Оповещение, Новый Структура);
	КонецЕсли;
	
	ОбновитьСтатусПослеПодписания();
	
КонецПроцедуры

&НаСервере
Функция ДобавитьПодпись(Знач СвойстваПодписи)
	
	Ошибки = Новый Массив;
	
	Если ТипЗнч(СвойстваПодписи) = Тип("Массив") Тогда
		Для Каждого Подпись Из СвойстваПодписи Цикл
			
			Свойства = ПолучитьИзВременногоХранилища(Подпись);
			Результат = МашиночитаемыеДоверенностиФНС.ДобавитьПодписьКФайлуДоверенности(Объект.ФайлДоверенности, Свойства);
			
			Если Результат <> Истина Тогда
				Ошибки.Добавить(Результат);
			КонецЕсли;
			
		КонецЦикла;
		
	Иначе
		
		Результат = МашиночитаемыеДоверенностиФНС.ДобавитьПодписьКФайлуДоверенности(Объект.ФайлДоверенности, СвойстваПодписи);
		Если Результат <> Истина Тогда
			Ошибки.Добавить(Результат);
		КонецЕсли;
	
	КонецЕсли;
	
	ЗаполнитьСписокПодписей();
	
	Возврат Ошибки;
	
КонецФункции

&НаКлиенте
Функция ОбновитьСформироватьФайлДоверенности()
	
	Если ЭлектронныеПодписи.Количество() = 0 И Не Подписана Тогда
		
		Если Объект.РегистрироватьВРеестре И Не ЗначениеЗаполнено(Объект.НомерДоверенности) Тогда
			
			Результат = ПолучитьНомерМЧДРР();
			
			Если ЗначениеЗаполнено(Результат.НомерДоверенности) Тогда
				Объект.НомерДоверенности = Результат.НомерДоверенности;
				Модифицированность = Истина;
			КонецЕсли;
			
		КонецЕсли;
			
		Если Не ЗначениеЗаполнено(Объект.НомерДоверенности) Тогда
			Объект.НомерДоверенности = Строка(Новый УникальныйИдентификатор);
			Модифицированность = Истина;
		КонецЕсли;
		
		ОповеститьОбИзменении = Модифицированность Или Параметры.Ключ.Пустая();
		
		Если Не СформироватьФайлДоверенности() Тогда
			Возврат Ложь;
		КонецЕсли;
		
		Если ОповеститьОбИзменении Тогда
			ОповеститьОЗаписи();
			ОповеститьОбИзменении(Объект.Ссылка);
		КонецЕсли;
		
		ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
		
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Объект.ФайлДоверенности) Тогда
		ВызватьИсключение НСтр("ru='Не найден файл доверенности.'")
	КонецЕсли;

	Возврат Истина;
	
КонецФункции

&НаСервере
Функция СформироватьФайлДоверенности()
	
	Если Модифицированность Или Параметры.Ключ.Пустая() Тогда
		ОбновитьОбъект();
	КонецЕсли;
	
	Если Не ЗаполнениеПроверено() Тогда
		Возврат Ложь;
	КонецЕсли;
	
	ДоверенностьОбъект = РеквизитФормыВЗначение("Объект");
	ОписаниеФайлаДоверенности = Справочники.МашиночитаемыеДоверенности.СформироватьФайлДоверенности(ДоверенностьОбъект);
	
	ПотокВПамяти = Новый ПотокВПамяти;
	ЗаписьТекста = Новый ЗаписьТекста(ПотокВПамяти);
	ЗаписьТекста.Записать(ОписаниеФайлаДоверенности.Текст);
	ЗаписьТекста.Закрыть();
	ДвоичныеДанные = ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();  
	АдресФайлаВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
	
	Если ЗначениеЗаполнено(Объект.ФайлДоверенности) Тогда
		СвойстваФайла = Новый Структура;
		СвойстваФайла.Вставить("АдресФайлаВоВременномХранилище", АдресФайлаВоВременномХранилище);
		СвойстваФайла.Вставить("АдресВременногоХранилищаТекста", "");
		
		РаботаСФайлами.ОбновитьФайл(Объект.ФайлДоверенности, СвойстваФайла);
	Иначе
		
		ОбъектМЧД = РеквизитФормыВЗначение("Объект");
		ПараметрыДобавления = РаботаСФайлами.ПараметрыДобавленияФайла();
		ПараметрыДобавления.ВладелецФайлов = Объект.Ссылка;
		ПараметрыДобавления.ИмяБезРасширения = ОписаниеФайлаДоверенности.ИмяБезРасширения;
		ПараметрыДобавления.РасширениеБезТочки = ОписаниеФайлаДоверенности.РасширениеБезТочки;
		ПараметрыДобавления.Служебный = Истина;
		ОбъектМЧД.ФайлДоверенности = РаботаСФайлами.ДобавитьФайл(ПараметрыДобавления, АдресФайлаВоВременномХранилище);
		ОбъектМЧД.Записать();
		
		ЗначениеВРеквизитФормы(ОбъектМЧД, "Объект");
		ПрочитатьРеквизиты(ОбъектМЧД);
		
		Элементы.ФормаДобавитьПодпись.Видимость = Истина;
		
	КонецЕсли;
	
	Возврат Истина;
	
КонецФункции

&НаСервере
Функция ПолучитьНомерМЧДРР()
	Возврат МашиночитаемыеДоверенностиФНССлужебный.ПолучитьНомерМЧДРР();
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьИДоступность(Форма, Условие = Неопределено)
	
	ОтобразитьДекорацииСтатуса(Форма);
	
	Если Условие = Неопределено Или Условие = "Подписание" Тогда
			
		РеквизитыНедоступныДляРедактирования = Форма.ЭлектронныеПодписи.Количество() > 0;
		
		Если Форма.РеквизитыНедоступныДляРедактирования <> РеквизитыНедоступныДляРедактирования Тогда
			Форма.РеквизитыНедоступныДляРедактирования = РеквизитыНедоступныДляРедактирования;
			Условие = Неопределено;
		КонецЕсли;
		
		ВидимостьПриИзмененииКоличестваПодписей(Форма);
		
	КонецЕсли;
	
	Если Условие = Неопределено Или Условие = "Доверитель" Тогда
		
		Если Форма.ДоверительНесколько Или Форма.ЛицоДоверителяНесколько Или Форма.ПредставительУправляющейКомпанииНесколько Тогда
			
			Форма.Элементы.ГруппаДоверительНесколько.Видимость = Истина;
			Если Форма.ДоверительНесколько Тогда
				Форма.Элементы.ГруппаДоверительНесколько.Заголовок = НСтр("ru='Доверители:'");
			ИначеЕсли Форма.ЛицоДоверителяНесколько Тогда
				Форма.Элементы.ГруппаДоверительНесколько.Заголовок = НСтр("ru='Лица, действующие без доверенности:'");
			ИначеЕсли Форма.ПредставительУправляющейКомпанииНесколько Тогда
				Форма.Элементы.ГруппаДоверительНесколько.Заголовок = НСтр("ru='Лица, действующие без доверенности управляющей компании:'");
			КонецЕсли;
			
		Иначе
			Форма.Элементы.ГруппаДоверительНесколько.Видимость = Ложь;
		КонецЕсли;
	
		Форма.Элементы.ГруппаОдинДоверитель.Видимость = Не Форма.ДоверительНесколько;
			
		Если Не Форма.ДоверительТипСтрока = "ФизическоеЛицо" И Не Форма.ДоверительНесколько Тогда
			
			Форма.Элементы.ГруппаЛицоДоверителя.Видимость = Истина; 
			Форма.Элементы.ГруппаЛицоДоверителяПредставитель.Видимость = Форма.ЛицоДоверителяТипСтрока <> "ФизическоеЛицо";
			Форма.Элементы.ГруппаОдноЛицоДоверителя.Видимость = Не Форма.ЛицоДоверителяНесколько;
			
			Если Форма.ЛицоДоверителяТипСтрока <> "ФизическоеЛицо"
				И Не Форма.ЛицоДоверителяНесколько Тогда
				Форма.Элементы.ГруппаЛицоДоверителяПредставитель.Видимость = Не Форма.ПредставительУправляющейКомпанииНесколько;
			КонецЕсли;
		
		Иначе
			Форма.Элементы.ГруппаЛицоДоверителя.Видимость = Ложь;
		КонецЕсли;
		
		РазрешенВводДоверенностиОснования = Форма.Элементы.ГруппаОдноЛицоДоверителя.Видимость
			И Не РеквизитыНедоступныДляРедактирования И ДоступенВыборДоверенностиОснования();
		
		ЕстьСсылкаНаДоверенностьОснование = Не Форма["Объект"].РодительскаяДоверенность.Пустая();
		ЕстьНомерДоверенностиОснования = ЗначениеЗаполнено(Форма["Объект"].РодительскаяДоверенностьНомер);
		
		Форма.Элементы.ДоверенностьЛицаДоверителя.Видимость = РазрешенВводДоверенностиОснования Или ЕстьСсылкаНаДоверенностьОснование;
		Форма.Элементы.ДоверенностьЛицаДоверителя.ТолькоПросмотр = Не РазрешенВводДоверенностиОснования;
	
		Форма.Элементы.НадписьПоДоверенности.Видимость = РазрешенВводДоверенностиОснования Или ЕстьСсылкаНаДоверенностьОснование Или ЕстьНомерДоверенностиОснования;
		Форма.Элементы.ДоверенностьЛицаДоверителяПредставление.Видимость = Не ЕстьСсылкаНаДоверенностьОснование И ЕстьНомерДоверенностиОснования;
		
		Форма.Элементы.ФлажокВозможностьПередоверия.ТолькоПросмотр = РеквизитыНедоступныДляРедактирования;
		Форма.Элементы.ВозможностьПередоверия.ТолькоПросмотр = РеквизитыНедоступныДляРедактирования;
		Форма.Элементы.ВозможностьПередоверия.КнопкаВыпадающегоСписка = Не РеквизитыНедоступныДляРедактирования;
		Форма.Элементы.ВозможностьПередоверия.Видимость = Форма["РазрешитьПередоверие"];
		
	КонецЕсли;

	Если Условие = Неопределено Или Условие = "Представитель" Или Условие = "ПредставительНесколько"
		Или Условие = "ЛицоПредставителяНесколько" Тогда
		
		ВидимостьПредставителей(Форма);

	КонецЕсли;

	Если Условие = Неопределено Или Условие = "ДляНалоговыхОрганов" Тогда
		ВидимостьДляНалоговыхОрганов(Форма);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция ДоступенВыборДоверенностиОснования()
	Возврат Ложь;
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура ВидимостьПриИзмененииКоличестваПодписей(Форма)
	
	РеквизитыНедоступныДляРедактирования = Форма.РеквизитыНедоступныДляРедактирования;
	
	ПросроченаИлиОтменена = Форма.Просрочена Или Форма.ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Просрочена")
		Или Форма.ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Отменена");

	Форма.Элементы.ФормаОтправить.Видимость = Ложь;
	Форма.Элементы.ФормаЗаписать.Видимость = Ложь;
	Форма.Элементы.ФормаПодписать.Видимость = Ложь;
	
	Если РеквизитыНедоступныДляРедактирования Тогда

		Форма.Элементы.ГруппаЭлектронныеПодписи.Видимость = Истина;

		Если Форма.ЭлектронныеПодписи.Количество() = 1 Тогда
			Форма.Элементы.ГруппаЭлектронныеПодписи.Заголовок = НСтр("ru = 'Подпись доверителя'");
		Иначе
			Форма.Элементы.ГруппаЭлектронныеПодписи.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Подписи доверителей (%1)'"), Форма.ЭлектронныеПодписи.Количество());
		КонецЕсли;

		Если Форма.Подписана Тогда
			Форма.Элементы.ЭлектронныеПодписиДобавитьПодпись.Видимость = Ложь;
			Форма.Элементы.ФормаДобавитьПодпись.Видимость = Ложь;
			Если МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ВнешниеСтатусы()[Форма.ТехническийСтатус] = Истина
				Или Форма.ЗарегистрированаВДругомРеестре Тогда
				Форма.Элементы.ЭлектронныеПодписиУдалитьПодпись.Видимость = Ложь;
			КонецЕсли;
		Иначе
			Форма.Элементы.ФормаПодписать.Видимость = Не ПросроченаИлиОтменена;
			Форма.Элементы.ЭлектронныеПодписиДобавитьПодпись.Видимость = Истина;
			Форма.Элементы.ФормаПодписать.КнопкаПоУмолчанию = Не ПросроченаИлиОтменена;
			Форма.Элементы.ФормаДобавитьПодпись.Видимость = Истина;
		КонецЕсли;
	Иначе
		Форма.Элементы.ФормаПодписать.Видимость = Не ПросроченаИлиОтменена;
		Форма.Элементы.ФормаПодписать.КнопкаПоУмолчанию = Не ПросроченаИлиОтменена;
		Форма.Элементы.ФормаЗаписать.Видимость = Истина;
		Форма.Элементы.ГруппаЭлектронныеПодписи.Видимость = Ложь;
		Форма.Элементы.ФормаДобавитьПодпись.Видимость = ЗначениеЗаполнено(Форма.Объект.ФайлДоверенности);
	КонецЕсли;

	Форма.Элементы.НомерДоверенности.ТолькоПросмотр = РеквизитыНедоступныДляРедактирования;
	ДоступностьПризнакаРегистрацииВРеестре(Форма);
	
	Форма.Элементы.РеквизитыДоверителя.Видимость = Не РеквизитыНедоступныДляРедактирования;
	Форма.Элементы.РеквизитыЛицаДоверителя.Видимость = Не РеквизитыНедоступныДляРедактирования;
	Форма.Элементы.РеквизитыПредставителяУправляющейОрганизации.Видимость = Не РеквизитыНедоступныДляРедактирования;
	Форма.Элементы.РеквизитыПредставителя.Видимость = Не РеквизитыНедоступныДляРедактирования;
	Форма.Элементы.РеквизитыЛицаПредставителя.Видимость = Не РеквизитыНедоступныДляРедактирования;

	Форма.Элементы.ПредставительДобавить.Видимость = Не РеквизитыНедоступныДляРедактирования;
	Форма.Элементы.ЛицоПредставителяДобавить.Видимость = Не РеквизитыНедоступныДляРедактирования;

	Форма.Элементы.ГруппаШапка.ТолькоПросмотр = РеквизитыНедоступныДляРедактирования;
	Форма.Элементы.ГруппаДоверители.ТолькоПросмотр = РеквизитыНедоступныДляРедактирования;
	Форма.Элементы.ГруппаПредставители.ТолькоПросмотр = РеквизитыНедоступныДляРедактирования;
	Форма.Элементы.ГруппаПодвал.ТолькоПросмотр = РеквизитыНедоступныДляРедактирования;

	ЛицоДоверителяОформление(Форма);

	Форма.Элементы.ПредставительВыборТипа.Видимость = Не РеквизитыНедоступныДляРедактирования;
	Форма.Элементы.ПредставительТипДекорация.Видимость = РеквизитыНедоступныДляРедактирования;

	Если РеквизитыНедоступныДляРедактирования Тогда
		Если Форма.ПредставительРеквизиты = Неопределено Тогда
			Форма.Элементы.ПредставительТипДекорация.Заголовок = НСтр("ru='Физическое лицо:'");
		Иначе
			Форма.Элементы.ПредставительТипДекорация.Заголовок = ?(Форма.ПредставительРеквизиты.ЭтоФизическоеЛицо, НСтр(
				"ru='Физическое лицо:'"), НСтр("ru='Организация:'"));
		КонецЕсли;
	КонецЕсли;
	
	ОтобразитьДекорациюВерна(Форма);

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ДоступностьПризнакаРегистрацииВРеестре(Форма)
	
	Форма.Элементы.РегистрироватьВРеестре.ТолькоПросмотр = Форма.РеквизитыНедоступныДляРедактирования
		И МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ВнешниеСтатусы()[Форма.ТехническийСтатус] = Истина;
	
	Если Форма.Элементы.РегистрироватьВРеестре.ТолькоПросмотр И Форма.Объект.РегистрироватьВРеестре
		И Форма.Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыМЧД.Действует") Тогда
		ЗаголовокРегистрироватьВРеестре = НСтр(
			"ru='Зарегистрирована в <a href = ""https://m4d.nalog.gov.ru/EMCHD/check-status?guid=%1"">распределенном реестре ФНС России</a>'");
	Иначе
		ЗаголовокРегистрироватьВРеестре = НСтр(
			"ru='Регистрировать в <a href = ""https://m4d.nalog.gov.ru/"">распределенном реестре ФНС России</a>'");
	КонецЕсли;
	
	#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
	МодульСтроковыеФункции = СтроковыеФункции;
	#Иначе
	МодульСтроковыеФункции = СтроковыеФункцииКлиент;
	#КонецЕсли

	Форма.Элементы.ДекорацияРегистрироватьВРеестреФНС.Заголовок = МодульСтроковыеФункции.ФорматированнаяСтрока(ЗаголовокРегистрироватьВРеестре, Форма.Объект.НомерДоверенности);
	
	Если Не Форма.Просрочена И (Форма.Подписана Или Форма.ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Подписана")) Тогда
		Если Не Форма.Объект.РегистрироватьВРеестре Тогда
			Форма.Элементы.ФормаОтправить.Видимость = Форма.РегистрироватьВДругомРеестре И Не Форма.ЗарегистрированаВДругомРеестре;
			Форма.Элементы.ФормаОтправить.Заголовок = НСтр("ru='Зарегистрировать в реестре'");
		Иначе
			Форма.Элементы.ФормаОтправить.Видимость = Форма.ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Подписана")
				Или Форма.РегистрироватьВДругомРеестре И Не Форма.ЗарегистрированаВДругомРеестре;
			Форма.Элементы.ФормаОтправить.Заголовок = ?(Форма.Объект.РегистрироватьВРеестре И Форма.РегистрироватьВДругомРеестре И Не Форма.ЗарегистрированаВДругомРеестре,
				НСтр("ru='Зарегистрировать в реестрах'"), НСтр("ru='Зарегистрировать в реестре'"));
		КонецЕсли;
		Форма.Элементы.ФормаОтправить.КнопкаПоУмолчанию = Форма.Элементы.ФормаОтправить.Видимость;
		Форма.Элементы.ФормаЗаписатьИЗакрыть.КнопкаПоУмолчанию = Не Форма.Элементы.ФормаОтправить.Видимость;
	Иначе
		Форма.Элементы.ФормаЗаписатьИЗакрыть.КнопкаПоУмолчанию = Не Форма.Элементы.ФормаПодписать.Видимость;
	КонецЕсли;

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ОтобразитьДекорацииСтатуса(Форма)
	
	Если Форма.ТребуетсяОбновлениеДекораций Тогда
		
		Форма.Элементы.ДекорацияПросрочена.Видимость = Форма.Просрочена Или Форма.ТехническийСтатус = ПредопределенноеЗначение(
			"Перечисление.ТехническиеСтатусыМЧД.Просрочена");
		Форма.Элементы.ДекорацияСоздание.Видимость = Не Форма.Просрочена И Форма.ТехническийСтатус = ПредопределенноеЗначение(
			"Перечисление.ТехническиеСтатусыМЧД.Создание") И Форма.Объект.РегистрироватьВРеестре;
		Форма.Элементы.ДекорацияСозданиеБезРегистрации.Видимость = Не Форма.Просрочена И Форма.ТехническийСтатус = ПредопределенноеЗначение(
			"Перечисление.ТехническиеСтатусыМЧД.Создание") И Не Форма.Объект.РегистрироватьВРеестре;
		Форма.Элементы.ДекорацияПодписана.Видимость = Не Форма.Просрочена И Форма.ТехническийСтатус = ПредопределенноеЗначение(
			"Перечисление.ТехническиеСтатусыМЧД.Подписана");
		Форма.Элементы.ДекорацияГотово.Видимость = Не Форма.Просрочена И Форма.ТехническийСтатус = ПредопределенноеЗначение(
			"Перечисление.ТехническиеСтатусыМЧД.Активна");
		Форма.Элементы.ДекорацияЗарегистрирована.Видимость = Не Форма.Просрочена И (Форма.ТехническийСтатус = ПредопределенноеЗначение(
			"Перечисление.ТехническиеСтатусыМЧД.Зарегистрирована") Или Форма.ТехническийСтатус
			= ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.ДатаНачалаДействияНеНаступила") Или Форма.ТехническийСтатус
			= ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.РегистрацияОтмены"));
		Форма.Элементы.ДекорацияПодписание.Видимость = Не Форма.Просрочена И Форма.ТехническийСтатус = ПредопределенноеЗначение(
			"Перечисление.ТехническиеСтатусыМЧД.Подписание") И Форма.Объект.РегистрироватьВРеестре;
		Форма.Элементы.ДекорацияПодписаниеБезРегистрации.Видимость = Не Форма.Просрочена И Форма.ТехническийСтатус = ПредопределенноеЗначение(
			"Перечисление.ТехническиеСтатусыМЧД.Подписание") И Не Форма.Объект.РегистрироватьВРеестре;
		Форма.Элементы.ДекорацияРегистрация.Видимость = Не Форма.Просрочена И Форма.ТехническийСтатус = ПредопределенноеЗначение(
			"Перечисление.ТехническиеСтатусыМЧД.Регистрация");
		Форма.Элементы.ДекорацияОтменена.Видимость =Не Форма.Просрочена И (Форма.ТехническийСтатус = ПредопределенноеЗначение(
			"Перечисление.ТехническиеСтатусыМЧД.Отменена") Или Форма.ТехническийСтатус = ПредопределенноеЗначение(
			"Перечисление.ТехническиеСтатусыМЧД.ОшибкаРегистрации"));
		Если Форма.Элементы.ДекорацияПодписана.Видимость Или Форма.Элементы.ДекорацияГотово.Видимость Тогда
			ОтобразитьОписаниеСостояния(Форма, Неопределено);
		КонецЕсли;
		ТребуетсяОбновлениеДекораций = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ОтобразитьДекорациюВерна(Форма)
	
	ЕстьПодписи = Форма.ЭлектронныеПодписи.Количество() > 0;
	Форма.Элементы.ФормаПроверитьДоверенность.Видимость = ЕстьПодписи;
	Форма.Элементы.ФормаДоверенностьПроверенаВручную.Видимость = ЕстьПодписи Или Форма.Объект.СтатусВернаУстановленВручную;
	Форма.Элементы.ФормаДоверенностьПроверенаВручную.Пометка = Форма.Объект.СтатусВернаУстановленВручную;
	
	Если ЕстьПодписи Тогда
		Если ЗначениеЗаполнено(Форма.Объект.ДатаПроверки) Тогда
			Форма.Элементы.ДекорацияНеверна.Видимость = Не Форма.Объект.Верна;
			Форма.Элементы.ДекорацияВерна.Видимость = Форма.Объект.Верна;
			
			Если Форма.Объект.Верна Тогда
				Если Форма.Объект.СтатусВернаУстановленВручную Тогда
					ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
						НСтр("ru='Верна. Статус установлен вручную %1 (%2)'"),
						Формат(Форма.Объект.ДатаПроверки, "ДЛФ=D"), Форма.Объект.УстановившийСтатусВерна);
					Форма.Элементы.ДекорацияВерна.Заголовок = ТекстЗаголовка;
				ИначеЕсли Форма.Объект.Верна Тогда
					ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
						НСтр("ru='Верна на дату проверки %1'"),
						Формат(Форма.Объект.ДатаПроверки, "ДЛФ=D"));
					Форма.Элементы.ДекорацияВерна.Заголовок = ТекстЗаголовка;
				КонецЕсли;
				Форма.Элементы.ФормаПроверитьДоверенность.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю;
			Иначе
				ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru='Неверна на дату проверки %1'"),
					Формат(Форма.Объект.ДатаПроверки, "ДЛФ=D"));
				Форма.Элементы.ДекорацияНеверна.Заголовок = ТекстЗаголовка;
				Форма.Элементы.ФормаПроверитьДоверенность.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВКоманднойПанелиИВДополнительномПодменю;
			КонецЕсли;
	
		Иначе
			Форма.Элементы.ДекорацияВерна.Видимость = Ложь;
			Форма.Элементы.ДекорацияНеверна.Видимость = Истина;
			ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru='Не проверена'"),
				Формат(Форма.Объект.ДатаПроверки, "ДЛФ=D"));
			Форма.Элементы.ДекорацияНеверна.Заголовок = ТекстЗаголовка;
			Форма.Элементы.ФормаПроверитьДоверенность.ПоложениеВКоманднойПанели = ПоложениеКнопкиВКоманднойПанели.ВКоманднойПанелиИВДополнительномПодменю;
		КонецЕсли;
	Иначе
		Форма.Элементы.ДекорацияВерна.Видимость = Ложь;
		Форма.Элементы.ДекорацияНеверна.Видимость = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ВидимостьДляНалоговыхОрганов(Форма)
	
	Форма.Элементы.ГруппаНалоговыеОрганы.Видимость = Форма.Объект.ДляНалоговыхОрганов;
	Форма.Элементы.ГруппаИныеСведения.Видимость = Не Форма.Объект.ДляНалоговыхОрганов
		И (Не Форма.РеквизитыНедоступныДляРедактирования Или ЗначениеЗаполнено(Форма.Объект.ИныеСведения));
	
	Если Форма.Объект.ДляНалоговыхОрганов Тогда
		КоличествоНалоговыхОргановДействия = Форма.Объект.НалоговыеОрганыДействия.Количество();
		Если КоличествоНалоговыхОргановДействия = 0 Тогда
			Форма.Элементы.ДекорацияНалоговыеОрганыДействия.Заголовок = НСтр("ru = 'Все'");
		ИначеЕсли КоличествоНалоговыхОргановДействия = 1 Тогда
			Форма.Элементы.ДекорацияНалоговыеОрганыДействия.Заголовок =
			Форма.Объект.НалоговыеОрганыДействия[0].КодНалоговогоОргана;
		ИначеЕсли КоличествоНалоговыхОргановДействия = 2 Тогда
			Форма.Объект.НалоговыеОрганыДействия.Сортировать("КодНалоговогоОргана");
			Форма.Элементы.ДекорацияНалоговыеОрганыДействия.Заголовок = СтрШаблон("%1, %2",
				Форма.Объект.НалоговыеОрганыДействия[0].КодНалоговогоОргана, Форма.Объект.НалоговыеОрганыДействия[1].КодНалоговогоОргана);
		Иначе
			Форма.Объект.НалоговыеОрганыДействия.Сортировать("КодНалоговогоОргана");
			Форма.Элементы.ДекорацияНалоговыеОрганыДействия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = '%1, %2 и еще %3'"),
				Форма.Объект.НалоговыеОрганыДействия[0].КодНалоговогоОргана,
				Форма.Объект.НалоговыеОрганыДействия[1].КодНалоговогоОргана,
				Формат(КоличествоНалоговыхОргановДействия - 2, "ЧДЦ=; ЧН=; ЧГ="));
		КонецЕсли;
	КонецЕсли;
	
	Если Форма.Объект.ДляНалоговыхОрганов Тогда
		Форма.Элементы.ДляНалоговыхОрганов.Заголовок = НСтр("ru = 'Для налоговых органов:'");
		Форма.Элементы.ГруппаНазначение.РасширеннаяПодсказка.Заголовок = НСтр("ru = 'Доверенность предназначена для подписания документов и представления в налоговые органы.'");
	Иначе
		Форма.Элементы.ДляНалоговыхОрганов.Заголовок = НСтр("ru = 'Для налоговых органов'");
		Форма.Элементы.ГруппаНазначение.РасширеннаяПодсказка.Заголовок = НСтр("ru = 'Доверенность предназначена только для подписания документов, без представления в налоговые органы.'");
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ВидимостьПредставителей(Форма)
	
	ЛицоПредставителяТолькоОдин = Ложь;
	
	Если Форма.ПредставительТипСтрока <> "ФизическоеЛицо" 
		И Не Форма.ПредставительНесколько
		И Форма.ПредставительРеквизиты <> Неопределено Тогда
		
		Если Форма.ПредставительРеквизиты.ЭтоИндивидуальныйПредприниматель
			Или Форма.ПредставительРеквизиты.ЭтоФилиал Тогда
			ЛицоПредставителяТолькоОдин = Форма.ПредставительРеквизиты.ЭтоИндивидуальныйПредприниматель;
			Форма.Элементы.ГруппаЛицоПредставителя.Видимость = Истина;
		Иначе
			Форма.Элементы.ГруппаЛицоПредставителя.Видимость = Ложь;
		КонецЕсли;
	Иначе
		Форма.Элементы.ГруппаЛицоПредставителя.Видимость = Ложь;
	КонецЕсли;
	
	Если Форма.ПредставительНесколько Или Форма.ЛицоПредставителяНесколько Тогда
		
		Форма.Элементы.ГруппаПредставительНесколько.Видимость = Не Форма.РеквизитыНедоступныДляРедактирования;
		Форма.Элементы.ТаблицаПредставительНесколько.Видимость = Истина;
		
		Если Форма.ЛицоПредставителяНесколько Тогда
			Форма.Элементы.ГруппаОдинПредставитель.Видимость = Истина;
			Форма.Элементы.ГруппаПредставительРеквизиты.Видимость = Истина;
			Форма.Элементы.ПредставительДекорация.Видимость = Истина;
			Форма.Элементы.ГруппаЛицоПредставителя.Видимость = Ложь;
			Форма.Элементы.ТаблицаПредставительНесколькоПредставитель.Видимость = Ложь;
		Иначе
			Форма.Элементы.ГруппаОдинПредставитель.Видимость = Ложь;
			Форма.Элементы.ТаблицаПредставительНесколькоПредставитель.Видимость = Истина;
		КонецЕсли;
			
		ТаблицаПредставительНесколькоКоличество = Форма.ТаблицаПредставительНесколько.Количество();
		
		Форма.Элементы.ГруппаПредставители.Заголовок = НСтр("ru='Представители'");
			
	Иначе
		Форма.Элементы.ГруппаПредставительНесколько.Видимость = Ложь;
		Форма.Элементы.ГруппаОдинПредставитель.Видимость  = Истина;
		Форма.Элементы.ТаблицаПредставительНесколько.Видимость = Ложь;
		Форма.Элементы.ГруппаПредставители.Заголовок = НСтр("ru='Представитель'");
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ВвестиРеквизитыОрганизацииПослеВвода(Результат, ИмяЭлементаОрганизация) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Модифицированность = Истина;
	
	Если ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"] = Неопределено Тогда
		ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"] = Результат;
	Иначе
		ЗаполнитьЗначенияСвойств(ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"], Результат);
	КонецЕсли;
	
	Если Результат.ЭтоФизическоеЛицо = Истина Тогда
		ЭлементыФИО = Новый Массив;
		Если ЗначениеЗаполнено(Результат.Фамилия) Тогда
			ЭлементыФИО.Добавить(Результат.Фамилия);
		КонецЕсли;
		Если ЗначениеЗаполнено(Результат.Имя) Тогда
			ЭлементыФИО.Добавить(Результат.Имя);
		КонецЕсли;
		Если ЗначениеЗаполнено(Результат.Отчество) Тогда
			ЭлементыФИО.Добавить(Результат.Отчество);
		КонецЕсли;
		НаименованиеСокращенное = СтрСоединить(Новый ФиксированныйМассив(ЭлементыФИО), " ");
		ЭтотОбъект[ИмяЭлементаОрганизация + "Наименование"] = НаименованиеСокращенное;
	Иначе
		НаименованиеСокращенное = ?(ЗначениеЗаполнено(Результат.НаименованиеСокращенное),
			Результат.НаименованиеСокращенное, Результат.НаименованиеПолное);
	КонецЕсли;
	
	ЭтотОбъект[ИмяЭлементаОрганизация + "Наименование"] = НаименованиеСокращенное;
	ОбновитьСтрокуДоверителейПредставителей(ИмяЭлементаОрганизация);
	
	Если ИмяЭлементаОрганизация = "Представитель" И ПредставительТипСтрока <> "ФизическоеЛицо" Тогда
		Если Не (ПредставительРеквизиты.ЭтоИндивидуальныйПредприниматель
			Или ПредставительРеквизиты.ЭтоФилиал) Тогда
			
			Строки = Объект.Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", ЭтотОбъект[ИмяЭлементаОрганизация + "Идентификатор"]));
			Для Каждого Строка Из Строки Цикл
				Объект.Представители.Удалить(Строка);
			КонецЦикла;
			
			ОчиститьЭлементыФормы("ЛицоПредставителя", Истина);
		Иначе
			ЗаполнитьТипОрганизации("ЛицоПредставителя", "ФизическоеЛицо");
		КонецЕсли;
	КонецЕсли;
	
	УстановитьОтображениеРеквизитовЗависимыхОтОрганизации(ИмяЭлементаОрганизация);
	
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьВидОрганизацииПослеВыбора(ВыбранныйЭлемент, Контекст) Экспорт
	
	ИмяЭлементаОрганизация = Контекст.ИмяЭлементаОрганизация;
	ДобавитьВТаблицуПредставителя = Контекст.ДобавитьВТаблицуПредставителя;
	
	Если ВыбранныйЭлемент <> Неопределено И ДобавитьВТаблицуПредставителя Тогда
		
		Реквизиты = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
			ВыбранныйЭлемент.Значение, Неопределено, Неопределено, Истина);
			
		ПараметрыФормы = МашиночитаемыеДоверенностиФНССлужебныйКлиент.ПараметрыФормыВводаРеквизитов(
			Неопределено, Реквизиты, РеквизитыНедоступныДляРедактирования, Истина);
			
		Контекст = Новый Структура("ИмяЭлементаОрганизация, Идентификатор, ИдентификаторРодителя", 
			ИмяЭлементаОрганизация, Неопределено, Неопределено);
		
		МашиночитаемыеДоверенностиФНССлужебныйКлиент.ОткрытьФормуВводаРеквизитов(ЭтотОбъект,
			ПараметрыФормы, Новый ОписаниеОповещения("ДобавитьВТаблицуПредставителя", ЭтотОбъект, Контекст));
			
		Возврат;
	КонецЕсли;
	
	Если ВыбранныйЭлемент = Неопределено
		Или ЭтотОбъект[ИмяЭлементаОрганизация + "ТипСтрока"] = ВыбранныйЭлемент.Значение Тогда
		Возврат;
	КонецЕсли;
	
	ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"] = Неопределено;
	ЗаполнитьТипОрганизации(ИмяЭлементаОрганизация, ВыбранныйЭлемент.Значение);
		
	Если ВыбранныйЭлемент.Значение = "ФизическоеЛицо" И ИмяЭлементаОрганизация = "Доверитель" Тогда
		Элементы.ГруппаЛицоДоверителя.Видимость = Ложь;
	Иначе
		Элементы.ГруппаЛицоДоверителя.Видимость = Истина;
	КонецЕсли; 
	
	Если ИмяЭлементаОрганизация = "Представитель" Тогда
		Если ВыбранныйЭлемент.Значение = "ФизическоеЛицо" Тогда
			ОчиститьРеквизитыОрганизации("ЛицоПредставителя");
		Иначе
			ЗаполнитьТипОрганизации("ЛицоПредставителя", "ФизическоеЛицо");
		КонецЕсли;
	ИначеЕсли ИмяЭлементаОрганизация = "ЛицоДоверителя" Тогда
		Если ВыбранныйЭлемент.Значение = "ФизическоеЛицо" Тогда
			ОчиститьРеквизитыОрганизации("ПредставительУправляющейКомпании");
		Иначе
			ЗаполнитьТипОрганизации("ПредставительУправляющейКомпании", "ФизическоеЛицо");
		КонецЕсли;
	ИначеЕсли ИмяЭлементаОрганизация = "Доверитель" И ВыбранныйЭлемент.Значение = "ФизическоеЛицо"  Тогда
		ОчиститьРеквизитыОрганизации("ЛицоДоверителя");
		ОчиститьРеквизитыОрганизации("ПредставительУправляющейКомпании");
	КонецЕсли;
	
	ОчиститьСообщения();
	НовыйБезИзменений = Не ЗначениеЗаполнено(Объект.Ссылка) И Не Модифицированность;
	
	ПриИзмененииОрганизацииНаСервере(ИмяЭлементаОрганизация);
	
	Если НовыйБезИзменений Тогда
		Модифицированность = Ложь;
	КонецЕсли;
	
	УстановитьВидимостьИДоступность(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьТипОрганизации(Знач ИмяЭлементаОрганизация, Знач ТипСтрока)
	
	ЭтотОбъект[ИмяЭлементаОрганизация + "ТипСтрока"] = ТипСтрока;
	
	МашиночитаемыеДоверенностиФНССлужебный.ЗаполнитьТипыЗначения(ТипСтрока,
			ЭтотОбъект[ИмяЭлементаОрганизация + "Тип"], Элементы[ИмяЭлементаОрганизация]);

	Если ИмяЭлементаОрганизация <> "ПредставительУправляющейКомпании"
		И ИмяЭлементаОрганизация <> "ЛицоПредставителя" Тогда
		Элементы[ИмяЭлементаОрганизация + "ВыборТипа"].Заголовок = ЗаголовокВыбораТипа(ТипСтрока);
	КонецЕсли;
	
	Если ЭтотОбъект[ИмяЭлементаОрганизация + "Тип"] = Неопределено Тогда
		
		Если ТипСтрока = "Организация" Тогда
			ПодсказкаВвода = НСтр("ru = 'Заполните поля организации'");
		ИначеЕсли ТипСтрока = "Контрагент" Тогда
			ПодсказкаВвода = НСтр("ru = 'Заполните поля контрагента'");
		ИначеЕсли ИмяЭлементаОрганизация = "Доверитель"
			Или ИмяЭлементаОрганизация = "ПредставительУправляющейКомпании"
			Или ИмяЭлементаОрганизация = "ЛицоДоверителя" Тогда
			ПодсказкаВвода = НСтр("ru = 'Заполните поля доверителя'");
		ИначеЕсли ИмяЭлементаОрганизация = "Представитель" Тогда
			ПодсказкаВвода = НСтр("ru = 'Заполните поля представителя'");
		ИначеЕсли ИмяЭлементаОрганизация = "ЛицоПредставителя" Тогда
			ПодсказкаВвода = НСтр("ru = 'Заполните поля физического лица'");
		КонецЕсли;
		
		Элементы[ИмяЭлементаОрганизация].ПодсказкаВвода = ПодсказкаВвода;
		Элементы[ИмяЭлементаОрганизация + "Наименование"].КнопкаВыбора = Ложь;
	Иначе
		
		Если ИмяЭлементаОрганизация = "ЛицоДоверителя" И ТипСтрока <> "ФизическоеЛицо" Тогда
			ПодсказкаВвода = НСтр("ru = 'Выберите управляющую компанию или заполните поля вручную'");
		ИначеЕсли ТипСтрока = "Организация" Тогда
			ПодсказкаВвода = НСтр("ru = 'Выберите организацию или заполните поля вручную'");
		ИначеЕсли ТипСтрока = "Контрагент" Тогда
			ПодсказкаВвода = НСтр("ru = 'Выберите контрагента или заполните поля вручную'");
		ИначеЕсли ИмяЭлементаОрганизация = "Доверитель" Или ИмяЭлементаОрганизация = "ЛицоДоверителя" Тогда
			ПодсказкаВвода = НСтр("ru = 'Выберите доверителя или заполните поля вручную'");
		ИначеЕсли ИмяЭлементаОрганизация = "ПредставительУправляющейКомпании" Тогда
			ПодсказкаВвода = НСтр("ru = 'Выберите лицо без доверенности управляющей компании или заполните поля вручную'");
		ИначеЕсли ИмяЭлементаОрганизация = "Представитель" Тогда
			ПодсказкаВвода = НСтр("ru = 'Выберите представителя или заполните поля вручную'");
		ИначеЕсли ИмяЭлементаОрганизация = "ЛицоПредставителя" Тогда
			ПодсказкаВвода = НСтр("ru = 'Выберите физическое лицо или заполните поля вручную'");
		КонецЕсли;
		Элементы[ИмяЭлементаОрганизация].ПодсказкаВвода = ПодсказкаВвода;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьФормуВводаРеквизитов(ИмяЭлементаОрганизация, Поле = Неопределено)
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ВвестиРеквизитыОрганизацииПослеВвода", ЭтотОбъект, ИмяЭлементаОрганизация);
	
	Если ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"] = Неопределено И Не РеквизитыНедоступныДляРедактирования Тогда
		ЗаполнитьРеквизитыОрганизации(ИмяЭлементаОрганизация);
	КонецЕсли;
	
	ПараметрыФормы = МашиночитаемыеДоверенностиФНССлужебныйКлиент.ПараметрыФормыВводаРеквизитов(ЭтотОбъект[ИмяЭлементаОрганизация],
		ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"], РеквизитыНедоступныДляРедактирования);
	ПараметрыФормы.Поле = Поле;
	ПараметрыФормы.ПоказыватьПерсональныеДанные = ПоказыватьПерсональныеДанные Или Не ТолькоПросмотр;
	
	МашиночитаемыеДоверенностиФНССлужебныйКлиент.ОткрытьФормуВводаРеквизитов(
		ЭтотОбъект, ПараметрыФормы, ОписаниеОповещения);
	
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииОрганизацииНаСервере(Знач ИмяЭлементаОрганизация, Знач Загрузка = Ложь)
	
	ЗаполнитьРеквизитыОрганизации(ИмяЭлементаОрганизация, Загрузка);

КонецПроцедуры

&НаСервере
Процедура ОбновитьСтрокуДоверителейПредставителей(Знач ИмяЭлементаОрганизация) 
	
	Если ИмяЭлементаОрганизация = "Представитель" Или ИмяЭлементаОрганизация = "ЛицоПредставителя" Тогда
		Таблица = Объект.Представители;
		ИмяКолонки = "Представитель";
	Иначе
		Таблица = Объект.Доверители;
		ИмяКолонки = "Доверитель";
	КонецЕсли;
	
	Если ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"] = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ЭтотОбъект[ИмяЭлементаОрганизация + "Идентификатор"]) Тогда
		ЭтотОбъект[ИмяЭлементаОрганизация + "Идентификатор"] = Новый УникальныйИдентификатор;
		НоваяСтрока = Таблица.Добавить();
		НоваяСтрока.Идентификатор = ЭтотОбъект[ИмяЭлементаОрганизация + "Идентификатор"];
	Иначе
		Строки = Таблица.НайтиСтроки(Новый Структура("Идентификатор", ЭтотОбъект[ИмяЭлементаОрганизация + "Идентификатор"]));
		Если Строки.Количество() = 0 Тогда
			НоваяСтрока = Таблица.Добавить();
			НоваяСтрока.Идентификатор = ЭтотОбъект[ИмяЭлементаОрганизация + "Идентификатор"];
		Иначе
			НоваяСтрока = Строки[0];
		КонецЕсли;
	КонецЕсли;
		
	НоваяСтрока[ИмяКолонки] = ЭтотОбъект[ИмяЭлементаОрганизация];
	
	РеквизитыУчастникаДляХранения = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастникаДляХранения(
		ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"]);
	ЗаполнитьЗначенияСвойств(РеквизитыУчастникаДляХранения, ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"]);
	Если ИмяКолонки = "Доверитель" Тогда
		НоваяСтрока.ЭтоФизЛицо = РеквизитыУчастникаДляХранения.ЭтоФизическоеЛицо;
	КонецЕсли;
	Если ПустаяСтрока(НоваяСтрока.АдресРеквизитов) Тогда
		НоваяСтрока.АдресРеквизитов = ПоместитьВоВременноеХранилище(РеквизитыУчастникаДляХранения, УникальныйИдентификатор);
	Иначе
		ПоместитьВоВременноеХранилище(РеквизитыУчастникаДляХранения, НоваяСтрока.АдресРеквизитов);
	КонецЕсли;
	
	Если ИмяЭлементаОрганизация = "ЛицоДоверителя" Тогда
		НоваяСтрока.ИдентификаторРодителя = ЭтотОбъект["ДоверительИдентификатор"];
	ИначеЕсли ИмяЭлементаОрганизация = "ПредставительУправляющейКомпании" Тогда
		НоваяСтрока.ИдентификаторРодителя = ЭтотОбъект["ЛицоДоверителяИдентификатор"];
	ИначеЕсли ИмяЭлементаОрганизация = "ЛицоПредставителя" Тогда
		НоваяСтрока.ИдентификаторРодителя = ЭтотОбъект["ПредставительИдентификатор"];
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ОчисткаДоверителяПредставителя(Знач ИмяЭлементаОрганизация)

	Если ИмяЭлементаОрганизация = "Представитель" Или ИмяЭлементаОрганизация = "ЛицоПредставителя" Тогда
		Таблица = Объект.Представители;
	Иначе
		Таблица = Объект.Доверители;
	КонецЕсли;
	
	УдалитьСтрокуДоверителейПредставителей(Таблица, ЭтотОбъект[ИмяЭлементаОрганизация + "Идентификатор"], Ложь);
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УдалитьСтрокуДоверителейПредставителей(Таблица, Идентификатор, ИзТаблицыНескольких)
	
	Найдено = Таблица.НайтиСтроки(Новый Структура("Идентификатор", Идентификатор));
	
	Если Найдено.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Строка = Найдено[0];
	ИдентификаторРодителя = Строка.ИдентификаторРодителя;
	Таблица.Удалить(Строка);
	
	Если Не ИзТаблицыНескольких Тогда
		Строки = Таблица.НайтиСтроки(Новый Структура("ИдентификаторРодителя", Идентификатор));
		Для Каждого Строка Из Строки Цикл
			Таблица.Удалить(Строка);
		КонецЦикла;
	Иначе
		Строки = Таблица.НайтиСтроки(Новый Структура("ИдентификаторРодителя", ИдентификаторРодителя));
		Если Строки.Количество() = 0 Тогда
			Строка = Таблица.НайтиСтроки(Новый Структура("Идентификатор", ИдентификаторРодителя))[0];
			Таблица.Удалить(Строка);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьРеквизитыРуководителя(ИмяЭлементаОрганизация, Загрузка = Ложь)
	
	Если ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"] = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ИмяЭлементаРуководитель = Неопределено;
	Если ИмяЭлементаОрганизация = "ЛицоДоверителя" И ЛицоДоверителяТипСтрока <> "ФизическоеЛицо" Тогда
		ИмяЭлементаРуководитель = "ПредставительУправляющейКомпании";
	ИначеЕсли ИмяЭлементаОрганизация = "Доверитель" И ДоверительТипСтрока <> "ФизическоеЛицо" Тогда
		ИмяЭлементаРуководитель = "ЛицоДоверителя";
	ИначеЕсли ИмяЭлементаОрганизация = "Представитель" И ПредставительТипСтрока <> "ФизическоеЛицо" Тогда
		Если ПредставительРеквизиты.ЭтоИндивидуальныйПредприниматель
			Или ПредставительРеквизиты.ЭтоФилиал Тогда
			ИмяЭлементаРуководитель = "ЛицоПредставителя";
		Иначе
			УдалитьСтрокуДоверителейПредставителей(Объект.Представители, ЭтотОбъект["ЛицоПредставителя" + "Идентификатор"], Ложь);
			ОчиститьЭлементыФормы("ЛицоПредставителя", Истина);
		КонецЕсли;
	КонецЕсли;
	
	Если ИмяЭлементаРуководитель = Неопределено Тогда
		Возврат;
	КонецЕсли;

	Если ЗначениеЗаполнено(ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"].ЛицоБезДоверенности)
		Или ЗначениеЗаполнено(ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"].РеквизитыЛицаБезДоверенности) Тогда
		
		ЗаполнитьТипОрганизации(ИмяЭлементаРуководитель, "ФизическоеЛицо");
		ЭтотОбъект[ИмяЭлементаРуководитель] = ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"].ЛицоБезДоверенности;
		Если ЗначениеЗаполнено(ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"].РеквизитыЛицаБезДоверенности) Тогда
			ЭтотОбъект[ИмяЭлементаРуководитель + "Реквизиты"] =
				ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"].РеквизитыЛицаБезДоверенности;
			УстановитьОтображениеРеквизитовЗависимыхОтОрганизации(ИмяЭлементаРуководитель);
			ОбновитьСтрокуДоверителейПредставителей(ИмяЭлементаРуководитель);
		ИначеЕсли ЗначениеЗаполнено(ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"].ЛицоБезДоверенности) Тогда
			ПриИзмененииОрганизацииНаСервере(ИмяЭлементаРуководитель, Загрузка);
		КонецЕсли;
	КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура СформироватьЗаголовокДекорации(ИмяЭлементаОрганизация)
	
	Реквизиты = ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"];
	
	Если Реквизиты = Неопределено Или Реквизиты.ЭтоФизическоеЛицо = Неопределено Тогда
		Элементы[ИмяЭлементаОрганизация + "Декорация"].Заголовок = "";
		Элементы["Группа" + ИмяЭлементаОрганизация + "Декорация"].Видимость = Ложь;
		Возврат;
	КонецЕсли;
	
	Элементы[ИмяЭлементаОрганизация + "Декорация"].Заголовок = ЗаголовокДекорации(Реквизиты, ИмяЭлементаОрганизация);
	Элементы["Группа" + ИмяЭлементаОрганизация + "Декорация"].Видимость = ЗначениеЗаполнено(Элементы[ИмяЭлементаОрганизация + "Декорация"].Заголовок);
	
КонецПроцедуры

&НаСервере
Функция ЗаголовокДекорации(Реквизиты, ИмяЭлементаОрганизация = Неопределено, ТолькоОбязательные = Ложь)
	
	Возврат МашиночитаемыеДоверенностиФНССлужебный.ЗаголовокДекорации(Реквизиты, ИмяЭлементаОрганизация, Подписана, ТолькоОбязательные,
		ПоказыватьПерсональныеДанные Или Не ТолькоПросмотр);

КонецФункции

&НаСервере
Функция ЗаголовокДекорацииТаблицы(Реквизиты, ИмяЭлементаОрганизация = Неопределено, ТолькоОбязательные = Ложь)
	
	Возврат МашиночитаемыеДоверенностиФНССлужебный.ЗаголовокДекорацииДляТаблицы(Реквизиты, ИмяЭлементаОрганизация, ТолькоОбязательные,
		ПоказыватьПерсональныеДанные Или Не ТолькоПросмотр);

КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура СформироватьЗаголовокПолномочий(Форма)
	
	Если Не Форма.Объект.ПолномочияВТекстовомВиде И Форма.Объект.Полномочия.Количество() = 0 Тогда
		Форма.Элементы.ДекорацияПолномочияПредставителя.Заголовок = НСтр("ru = '<Не выбраны>'");
	ИначеЕсли Форма.Объект.ПолномочияВТекстовомВиде
		И Форма.Объект.ТекстПолномочий = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ПредставлениеНеограниченныхПолномочий() Тогда
		Форма.Элементы.ДекорацияПолномочияПредставителя.Заголовок = Форма.Объект.ТекстПолномочий;
	ИначеЕсли Форма.Объект.ПолномочияВТекстовомВиде Тогда
		Если СтрДлина(Форма.Объект.ТекстПолномочий) > 255 Тогда
			Форма.Элементы.ДекорацияПолномочияПредставителя.Заголовок = Лев(Форма.Объект.ТекстПолномочий, 255) + " ...";
		Иначе
			Форма.Элементы.ДекорацияПолномочияПредставителя.Заголовок = Форма.Объект.ТекстПолномочий;
		КонецЕсли;
	Иначе
		ПредставлениеПолномочий = Новый Массив;
		Для Каждого СтрокаПолномочия Из Форма.Объект.Полномочия Цикл
			ПредставлениеПолномочия = ?(ЗначениеЗаполнено(СтрокаПолномочия.Наименование),
				СтрокаПолномочия.Наименование, СтрокаПолномочия.Код);
			
			ЕстьОграничения = "";
			Если Форма.Объект.Ограничения.НайтиСтроки(
				Новый Структура("ИдентификаторПолномочия", СтрокаПолномочия.ИдентификаторПолномочия)).Количество() > 0 Тогда
				ЕстьОграничения =  " " + НСтр("ru = '(с ограничениями)'");
			КонецЕсли;
			
			Если ПустаяСтрока(ПредставлениеПолномочия) Тогда
				ПредставлениеПолномочия = НСтр("ru = '<Не заполнено>'") + ЕстьОграничения;
			ИначеЕсли СтрДлина(ПредставлениеПолномочия) > 255 Тогда
				ПредставлениеПолномочия =  Лев(ПредставлениеПолномочия, 255) + ЕстьОграничения + " ...";
			Иначе
				ПредставлениеПолномочия = ПредставлениеПолномочия + ЕстьОграничения;
			КонецЕсли;
			
			ПредставлениеПолномочий.Добавить(ПредставлениеПолномочия);
			Если ПредставлениеПолномочий.Количество() > 5 Тогда
				Прервать;
			КонецЕсли;
		КонецЦикла;
		
		КоличествоПолномочийВЗаголовке = ПредставлениеПолномочий.Количество();
		
		Если КоличествоПолномочийВЗаголовке = 0 Тогда
			Форма.Элементы.ДекорацияПолномочияПредставителя.Заголовок = 
				СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Машиночитаемые полномочия (%1)...'"), Форма.Объект.Полномочия.Количество());
		Иначе
			КоличествоПолномочийВЗаголовке = Форма.Объект.Полномочия.Количество() - КоличествоПолномочийВЗаголовке;
			Если КоличествоПолномочийВЗаголовке > 0 Тогда
				Форма.Элементы.ДекорацияПолномочияПредставителя.Заголовок = 
					СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 и еще %2...'"),
					СтрСоединить(ПредставлениеПолномочий, ";" + Символы.ПС), КоличествоПолномочийВЗаголовке);
			Иначе
				Форма.Элементы.ДекорацияПолномочияПредставителя.Заголовок = СтрСоединить(ПредставлениеПолномочий, ";" + Символы.ПС);
			КонецЕсли;
		КонецЕсли;
		
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьРеквизитыОрганизации(Знач ИмяЭлементаОрганизация, Загрузка = Ложь)
	
	ОрганизацияТип = ЭтотОбъект[ИмяЭлементаОрганизация + "Тип"];
	ОрганизацияСсылка = МашиночитаемыеДоверенностиФНССлужебный.ТекущееЗначениеРеквизита(
		ЭтотОбъект[ИмяЭлементаОрганизация], ОрганизацияТип, ИмяЭлементаОрганизация);
				
	ЭтотОбъект[ИмяЭлементаОрганизация] = ?(Загрузка, ЭтотОбъект[ИмяЭлементаОрганизация],
		МашиночитаемыеДоверенностиФНССлужебный.ТекущееЗначениеРеквизита(ОрганизацияСсылка, ОрганизацияТип));
		
	УточнитьПустоеЗначение(ИмяЭлементаОрганизация, Загрузка);

	Если Загрузка Тогда
		УстановитьОтображениеРеквизитовЗависимыхОтОрганизации(ИмяЭлементаОрганизация);
	Иначе
		
		ОрганизацияТипСтрока = ЭтотОбъект[ИмяЭлементаОрганизация + "ТипСтрока"];
		
		ВидУчастника = Неопределено;
		
		Если ИмяЭлементаОрганизация = "ЛицоДоверителя" И ОрганизацияТипСтрока = "ФизическоеЛицо" Тогда
			Если ДоверительРеквизиты <> Неопределено И ДоверительРеквизиты.ЭтоИндивидуальныйПредприниматель <> Неопределено Тогда
				ВидУчастника = ?(ДоверительРеквизиты.ЭтоИндивидуальныйПредприниматель, 
					"ИндивидуальныйПредприниматель", "ДолжностноеЛицо");
			Иначе
				ВидУчастника = "ДолжностноеЛицо";
			КонецЕсли;
		ИначеЕсли ИмяЭлементаОрганизация = "ПредставительУправляющейКомпании" И ОрганизацияТипСтрока = "ФизическоеЛицо" Тогда
			ВидУчастника = "ДолжностноеЛицо";
		ИначеЕсли ИмяЭлементаОрганизация = "ЛицоПредставителя" Тогда
			
			Если ПредставительРеквизиты <> Неопределено И ПредставительРеквизиты.ЭтоИндивидуальныйПредприниматель <> Неопределено Тогда
				ВидУчастника = ?(ПредставительРеквизиты.ЭтоИндивидуальныйПредприниматель, 
					"ИндивидуальныйПредприниматель", "ДолжностноеЛицо");
			Иначе
				ВидУчастника = "ДолжностноеЛицо";
			КонецЕсли;

		КонецЕсли;
		
		Реквизиты = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастника(
			ОрганизацияТипСтрока, ОрганизацияСсылка, ВидУчастника);
	
		Реквизиты.Вставить("ТипСсылки", ?(ОрганизацияТип = Неопределено,
			Неопределено, Новый ОписаниеТипов(ОрганизацияТип.ВыгрузитьЗначения())));
		
		ПриПотереГотовности(ЭтотОбъект);
		МашиночитаемыеДоверенностиФНССлужебный.ПриЗаполненииРеквизитовОрганизации(Реквизиты);
		ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"] = Реквизиты;
		ОбновитьСтрокуДоверителейПредставителей(ИмяЭлементаОрганизация);
		
		ЗаполнитьРеквизитыРуководителя(ИмяЭлементаОрганизация);
		УстановитьОтображениеРеквизитовЗависимыхОтОрганизации(ИмяЭлементаОрганизация);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьОтображениеРеквизитовЗависимыхОтОрганизации(Знач ИмяЭлементаОрганизация)
	
	Организация = ЭтотОбъект[ИмяЭлементаОрганизация];
	Реквизиты = ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"];
	
	Если Реквизиты <> Неопределено И ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"].ЭтоФизическоеЛицо = Истина Тогда
		ЭлементыФИО = Новый Массив;
		Если ЗначениеЗаполнено(Реквизиты.Фамилия) Тогда
			ЭлементыФИО.Добавить(Реквизиты.Фамилия);
		КонецЕсли;
		Если ЗначениеЗаполнено(Реквизиты.Имя) Тогда
			ЭлементыФИО.Добавить(Реквизиты.Имя);
		КонецЕсли;
		Если ЗначениеЗаполнено(Реквизиты.Отчество) Тогда
			ЭлементыФИО.Добавить(Реквизиты.Отчество);
		КонецЕсли;
		НаименованиеСокращенное = СтрСоединить(Новый ФиксированныйМассив(ЭлементыФИО), " ");
		ЭтотОбъект[ИмяЭлементаОрганизация + "Наименование"] = НаименованиеСокращенное;
	ИначеЕсли Реквизиты <> Неопределено Тогда
		НаименованиеСокращенное = ?(ЗначениеЗаполнено(Реквизиты.НаименованиеСокращенное),
			Реквизиты.НаименованиеСокращенное, Реквизиты.НаименованиеПолное);
	Иначе
		НаименованиеСокращенное = "";
	КонецЕсли;
	
	ЭтотОбъект[ИмяЭлементаОрганизация + "Наименование"] = НаименованиеСокращенное;
	
	РеквизитыВведеныВручную = ЗначениеЗаполнено(НаименованиеСокращенное)
		И (Не ЗначениеЗаполнено(ЭтотОбъект[ИмяЭлементаОрганизация])
		   Или ЗначениеЗаполнено(ЭтотОбъект[ИмяЭлементаОрганизация])
		     И Строка(ЭтотОбъект[ИмяЭлементаОрганизация]) <> НаименованиеСокращенное );

	Элементы[ИмяЭлементаОрганизация].Видимость = Не РеквизитыВведеныВручную;
	Элементы[ИмяЭлементаОрганизация + "Наименование"].Видимость = РеквизитыВведеныВручную;
	Элементы[ИмяЭлементаОрганизация + "Наименование"].КнопкаВыбора = ЭтотОбъект[ИмяЭлементаОрганизация + "Тип"] <> Неопределено;
	Элементы[ИмяЭлементаОрганизация + "Наименование"].КнопкаОткрытия = Истина;
	
	Если ИмяЭлементаОрганизация = "Представитель" Тогда
		УстановитьВидимостьИДоступность(ЭтотОбъект, "Представитель");
	КонецЕсли;
	
	Если ИмяЭлементаОрганизация = "Доверитель" Тогда
		ЛицоДоверителяОформление(ЭтотОбъект);
	КонецЕсли;
	
	СформироватьЗаголовокДекорации(ИмяЭлементаОрганизация);

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ЛицоДоверителяОформление(Форма)
	
	Если Форма.ДоверительРеквизиты <> Неопределено
		И Форма.ДоверительРеквизиты.ЭтоИндивидуальныйПредприниматель Тогда
		Форма.Элементы.ДекорацияЛицоДоверителяЗаголовок.Видимость = Ложь;
		Форма.Элементы.ЛицоДоверителяВыборТипа.Видимость = Ложь;
		Форма.Элементы.ЛицоДоверителяТипДекорация.Видимость = Истина;
	Иначе
		Форма.Элементы.ДекорацияЛицоДоверителяЗаголовок.Видимость = Истина;
		Форма.Элементы.ЛицоДоверителяВыборТипа.Видимость = Не Форма.РеквизитыНедоступныДляРедактирования;
		Форма.Элементы.ЛицоДоверителяТипДекорация.Видимость = Форма.РеквизитыНедоступныДляРедактирования;
	КонецЕсли; 
	
	Если Форма.ЛицоДоверителяРеквизиты = Неопределено Тогда
				Форма.Элементы.ЛицоДоверителяТипДекорация.Заголовок = НСтр("ru='Физическое лицо:'");
	Иначе
		Форма.Элементы.ЛицоДоверителяТипДекорация.Заголовок = ?(Форма.ЛицоДоверителяРеквизиты.ЭтоФизическоеЛицо,
			НСтр("ru='Физическое лицо:'"), НСтр("ru='Организация:'"));
	КонецЕсли;

КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ПриПотереГотовности(Форма, УстановитьМодифицированность = Истина)
	
	Форма.Модифицированность = Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура ВыборТипаОрганизации(ИмяЭлементаОрганизация, ИмяЭлементаДляДобавления = Неопределено) 
	
	СписокВыбора = Новый СписокЗначений;
	
	Если ИмяЭлементаОрганизация = "ЛицоДоверителя" Тогда
		СписокВыбора.Добавить("Организация",    НСтр("ru = 'Организация'"));
		СписокВыбора.Добавить("Контрагент",     НСтр("ru = 'Контрагент'"));
		СписокВыбора.Добавить("ФизическоеЛицо", НСтр("ru = 'Физическое лицо'"));
	ИначеЕсли ИмяЭлементаОрганизация = "Доверитель" Тогда
		СписокВыбора.Добавить("Организация",    НСтр("ru = 'Организация'"));
		СписокВыбора.Добавить("ФизическоеЛицо", НСтр("ru = 'Физическое лицо'"));
	ИначеЕсли ИмяЭлементаОрганизация = "Представитель" Тогда
		СписокВыбора.Добавить("Организация",    НСтр("ru = 'Организация'"));
		СписокВыбора.Добавить("ФизическоеЛицо", НСтр("ru = 'Физическое лицо'"));
		СписокВыбора.Добавить("Контрагент",     НСтр("ru = 'Контрагент'"));
	КонецЕсли;
	
	Оповещение = Новый ОписаниеОповещения("ВыбратьВидОрганизацииПослеВыбора", 
		ЭтотОбъект, Новый Структура("ИмяЭлементаОрганизация, ДобавитьВТаблицуПредставителя",
			ИмяЭлементаОрганизация, ИмяЭлементаДляДобавления <> Неопределено));
		
	Если ИмяЭлементаДляДобавления <> Неопределено Тогда
		Элемент = Элементы[ИмяЭлементаДляДобавления];
	Иначе
		Элемент = Элементы[ИмяЭлементаОрганизация + "ВыборТипа"];
	КонецЕсли;
	
	ПоказатьВыборИзМеню(Оповещение, СписокВыбора, Элемент);

КонецПроцедуры

&НаКлиенте
Процедура ДобавитьВТаблицуПредставителя(Результат, Контекст) Экспорт
	
	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Таблица = Объект.Представители;
	
	Если Не ЗначениеЗаполнено(Контекст.Идентификатор) Тогда
		НоваяСтрока = Таблица.Добавить();
		НоваяСтрока.Идентификатор = Новый УникальныйИдентификатор;
	Иначе
		Строки = Таблица.НайтиСтроки(Новый Структура("Идентификатор", Контекст.Идентификатор));
		Если Строки.Количество() = 0 Тогда
			НоваяСтрока = Таблица.Добавить();
			НоваяСтрока.Идентификатор = Контекст.Идентификатор;
		Иначе
			НоваяСтрока = Строки[0];
		КонецЕсли;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Контекст.ИдентификаторРодителя) Тогда
		НоваяСтрока.ИдентификаторРодителя = Контекст.ИдентификаторРодителя;
	КонецЕсли;
		
	НоваяСтрока.Представитель = Результат.Ссылка;
	
	РеквизитыУчастникаДляХранения = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РеквизитыУчастникаДляХранения(
		Результат);
	ЗаполнитьЗначенияСвойств(РеквизитыУчастникаДляХранения, Результат);
	
	Если ПустаяСтрока(НоваяСтрока.АдресРеквизитов) Тогда
		НоваяСтрока.АдресРеквизитов = ПоместитьВоВременноеХранилище(РеквизитыУчастникаДляХранения, УникальныйИдентификатор);
	Иначе
		ПоместитьВоВременноеХранилище(РеквизитыУчастникаДляХранения, НоваяСтрока.АдресРеквизитов);
	КонецЕсли;
	
	Если Не Результат.ЭтоФизическоеЛицо И ЗначениеЗаполнено(Результат.Представители) Тогда
		Для Каждого ТекущийПредставитель Из Результат.Представители Цикл
			Если Не ЗначениеЗаполнено(ТекущийПредставитель.Идентификатор) Тогда
				НоваяСтрокаПредставитель = Таблица.Добавить();
				НоваяСтрокаПредставитель.Идентификатор = Новый УникальныйИдентификатор;
			Иначе
				Строки = Таблица.НайтиСтроки(Новый Структура("Идентификатор", ТекущийПредставитель.Идентификатор));
				Если Строки.Количество() = 0 Тогда
					НоваяСтрокаПредставитель = Таблица.Добавить();
					НоваяСтрокаПредставитель.Идентификатор = ТекущийПредставитель.Идентификатор;
				Иначе
					НоваяСтрокаПредставитель = Строки[0];
				КонецЕсли;
			КонецЕсли;
			НоваяСтрокаПредставитель.АдресРеквизитов = ТекущийПредставитель.АдресРеквизитов;
			НоваяСтрокаПредставитель.ИдентификаторРодителя = НоваяСтрока.Идентификатор;
		КонецЦикла;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Контекст.ИдентификаторРодителя) Тогда
		ЛицоПредставителяНесколько = Истина;
		ПредставительНесколько = Ложь;
		СформироватьТаблицуНесколькоПредставителей(Контекст.ИдентификаторРодителя);
	Иначе
		ПредставительНесколько = Истина;
		ЛицоПредставителяНесколько = Ложь;
		СформироватьТаблицуНесколькоПредставителей();
	КонецЕсли;
	
	ВидимостьПредставителей(ЭтотОбъект);
	
	Модифицированность = Истина;

КонецПроцедуры

&НаКлиенте
Процедура ОчиститьРеквизитыОрганизации(ИмяЭлементаОрганизация)
	
	Если ЗначениеЗаполнено(ЭтотОбъект[ИмяЭлементаОрганизация + "Идентификатор"]) Тогда
		ОчисткаДоверителяПредставителя(ИмяЭлементаОрганизация);
	КонецЕсли;
	
	ОчиститьЭлементыФормы(ИмяЭлементаОрганизация);
	
КонецПроцедуры

&НаСервере
Процедура ОчиститьЭлементыФормы(Знач ИмяЭлементаОрганизация, Знач ОчищатьИдентификатор = Ложь)
	
	ЭтотОбъект[ИмяЭлементаОрганизация] = Неопределено;
	ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"] = Неопределено;
	Если ОчищатьИдентификатор Тогда
		ЭтотОбъект[ИмяЭлементаОрганизация + "Идентификатор"] = Неопределено;
	КонецЕсли;
	ЭтотОбъект[ИмяЭлементаОрганизация + "Наименование"] = "";
	УточнитьПустоеЗначение(ИмяЭлементаОрганизация);
	УстановитьОтображениеРеквизитовЗависимыхОтОрганизации(ИмяЭлементаОрганизация);
	
КонецПроцедуры

&НаСервере
Процедура УточнитьПустоеЗначение(ИмяЭлементаОрганизация, Загрузка = Ложь)
	
	Реквизит = ЭтотОбъект[ИмяЭлементаОрганизация];
	РеквизитТип = ЭтотОбъект[ИмяЭлементаОрганизация + "Тип"];
	
	Если Загрузка И Не ЗначениеЗаполнено(Реквизит) И РеквизитТип = Неопределено Тогда
		Реквизит = Неопределено;
	КонецЕсли;
	
	Если РеквизитТип <> Неопределено
		И РеквизитТип.Количество() = 1
		И Реквизит = Неопределено Тогда
		
		ОписаниеТипов = Новый ОписаниеТипов(РеквизитТип.ВыгрузитьЗначения());
		ЭтотОбъект[ИмяЭлементаОрганизация] = ОписаниеТипов.ПривестиЗначение(Неопределено);
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ЭлементОрганизацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ИмяРеквизита = СтрЗаменить(Элемент.Имя, "Наименование", "");
	ИмяРеквизитаТип = ИмяРеквизита + "Тип";
	ИмяРеквизитаЗначения = Элемент.Имя;
	
	Контекст = Новый Структура;
	Контекст.Вставить("Элемент", Элемент);
	Контекст.Вставить("ИмяРеквизита", ИмяРеквизита);
	Контекст.Вставить("ИмяРеквизитаТип", ИмяРеквизитаТип);
	Контекст.Вставить("ИмяРеквизитаЗначения", ИмяРеквизитаЗначения);
	
	Если ТипЗнч(ЭтотОбъект[ИмяРеквизитаТип]) <> Тип("СписокЗначений") Тогда
		Возврат;
	ИначеЕсли ЭтотОбъект[ИмяРеквизитаТип].Количество() = 1 Тогда
		ЗначениеНачалоВыбораПослеВыбораТипа(ЭтотОбъект[ИмяРеквизитаТип][0], Контекст);
	Иначе
		
		СписокВыбораТипов = Новый СписокЗначений;
		СписокВыбораТипов.ЗагрузитьЗначения(ЭтотОбъект[ИмяРеквизитаТип].ВыгрузитьЗначения());
		СписокВыбораТипов.ПоказатьВыборЭлемента(
			Новый ОписаниеОповещения("ЗначениеНачалоВыбораПослеВыбораТипа", ЭтотОбъект, Контекст),
			НСтр("ru = 'Выбор типа данных'"),
			ЭтотОбъект[ИмяРеквизитаТип].НайтиПоЗначению(ТипЗнч(ЭтотОбъект[ИмяРеквизитаЗначения])));
			
	КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ЗначениеНачалоВыбораПослеВыбораТипа(ЭлементСписка, Контекст) Экспорт
	
	Если ЭлементСписка = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Элемент = Контекст.Элемент;
	ИмяРеквизита = Контекст.ИмяРеквизита;
	ИмяРеквизитаТип = Контекст.ИмяРеквизитаТип;
	ИмяРеквизитаЗначения = Контекст.ИмяРеквизитаЗначения;
	
	МассивТипов = Новый Массив;
	МассивТипов.Добавить(ЭлементСписка.Значение);
	
	ОписаниеТипов = Новый ОписаниеТипов(МассивТипов);
	НачальноеЗначение = ОписаниеТипов.ПривестиЗначение(ЭтотОбъект[ИмяРеквизитаЗначения]);
	
	Если ИмяРеквизита = ИмяРеквизитаЗначения Тогда
		ЭтотОбъект[ИмяРеквизитаЗначения] = НачальноеЗначение;
	КонецЕсли;
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("РежимВыбора", Истина);
	ПараметрыФормы.Вставить("ТекущаяСтрока", НачальноеЗначение);
	ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Истина);
	ПараметрыФормы.Вставить("МножественныйВыбор", Ложь);
	
	ИмяФормыВыбора = ЭтотОбъект[ИмяРеквизитаТип].НайтиПоЗначению(ТипЗнч(НачальноеЗначение)).Представление
		+ ".ФормаВыбора";
	
	ОткрытьФорму(ИмяФормыВыбора, ПараметрыФормы, Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияРеквизитыПриИзмененииДоверитель()
	
	ОбработчикОжиданияРеквизитыПриИзменении("Доверитель");
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияРеквизитыПриИзмененииЛицоДоверителя()
	
	ОбработчикОжиданияРеквизитыПриИзменении("ЛицоДоверителя");
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияРеквизитыПриИзмененииПредставительУправляющейКомпании()
	
	ОбработчикОжиданияРеквизитыПриИзменении("ПредставительУправляющейКомпании");
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияРеквизитыПриИзмененииПредставитель()
	
	ОбработчикОжиданияРеквизитыПриИзменении("Представитель");
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияРеквизитыПриИзмененииЛицоПредставителя()
	
	ОбработчикОжиданияРеквизитыПриИзменении("ЛицоПредставителя");
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияРеквизитыПриИзменении(ИмяЭлементаОрганизация)
	
	ПриИзмененииОрганизацииНаСервере(ИмяЭлементаОрганизация);
	
КонецПроцедуры

&НаКлиенте
Процедура ОрганизацияПриИзменении(ИмяЭлементаОрганизация)
	
	ОчиститьСообщения();
	Если ЗначениеЗаполнено(ЭтотОбъект[ИмяЭлементаОрганизация]) Тогда
		ПриИзмененииОрганизацииНаСервере(ИмяЭлементаОрганизация, РеквизитыНедоступныДляРедактирования);
	Иначе
		ОчиститьЭлементыФормы(ИмяЭлементаОрганизация, Ложь);
		ОбновитьСтрокуДоверителейПредставителей(ИмяЭлементаОрганизация);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОрганизацияОчистка(ИмяЭлементаОрганизация, Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ПриПотереГотовности(ЭтотОбъект);
	
	ОчиститьСообщения();
	ОчиститьРеквизитыОрганизации(ИмяЭлементаОрганизация);
	
	УстановитьОтображениеРеквизитовЗависимыхОтОрганизации(ИмяЭлементаОрганизация);
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьУчастника(УчастникСсылка, ТипУчастника)
	
	Реквизиты = МашиночитаемыеДоверенностиФНССлужебный.РеквизитыУчастникаПоСсылке(УчастникСсылка);
	Если ТипУчастника = "Доверитель" Тогда
		Строка = Объект.Доверители.Добавить();
		Строка.ЭтоФизЛицо = Реквизиты.ЭтоФизическоеЛицо = Истина;
	Иначе
		Строка = Объект.Представители.Добавить();
	КонецЕсли;
	Строка.Идентификатор = Новый УникальныйИдентификатор;
	Строка[ТипУчастника] = УчастникСсылка;
	Строка.АдресРеквизитов = ПоместитьВоВременноеХранилище(Реквизиты);
	
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьЗначенияВФорму()
	
	Строки = Объект.Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", 
		Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
	ДоверительНесколько = Строки.Количество() > 1;
	
	Если Строки.Количество() > 0 Тогда
		ЗагрузитьДоверителяИзСтроки(Строки[0].Идентификатор);
	Иначе
		ЗаполнитьПустоеЗначениеФормы("Доверитель");
		ЗаполнитьПустоеЗначениеФормы("ЛицоДоверителя");
		ЗаполнитьПустоеЗначениеФормы("ПредставительУправляющейКомпании");
	КонецЕсли;
	
	Строки = Объект.Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", 
		Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")));
	ПредставительНесколько = Строки.Количество() > 1;
	
	Если ПредставительНесколько Тогда
		СформироватьТаблицуНесколькоПредставителей();
	ИначеЕсли Строки.Количество() = 1 Тогда
		ЗагрузитьПредставителяИзСтроки(Строки[0].Идентификатор);
	Иначе
		ЗаполнитьПустоеЗначениеФормы("Представитель");
		ЗаполнитьПустоеЗначениеФормы("ЛицоПредставителя");
	КонецЕсли;
	
	СформироватьЗаголовокПолномочий(ЭтотОбъект);
	УстановитьВидимостьИДоступность(ЭтотОбъект);
	
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьДоверителяИзСтроки(ИД)
	
	ДоверительСтрока = Объект.Доверители.НайтиСтроки(Новый Структура("Идентификатор", ИД))[0];
	ЗагрузитьЗначенияРеквизитаФормы("Доверитель", ДоверительСтрока);
	
	Если ДоверительРеквизиты <> Неопределено И Не ДоверительРеквизиты.ЭтоФизическоеЛицо Тогда
		
		Строки = Объект.Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", ИД));
		КоличествоСтрок = Строки.Количество();
		ЛицоДоверителяНесколько = КоличествоСтрок > 1;
		
		Если КоличествоСтрок > 0 Тогда
			ЗагрузитьЛицоДоверителяИзСтроки(Строки[0].Идентификатор);
		Иначе
			ЗаполнитьПустоеЗначениеФормы("ЛицоДоверителя");
			Если ЛицоДоверителяТипСтрока <> "ФизическоеЛицо" Тогда
				ЗаполнитьПустоеЗначениеФормы("ПредставительУправляющейКомпании");
			КонецЕсли;
		КонецЕсли;
		
	КонецЕсли;

КонецПроцедуры 

&НаСервере
Процедура ЗагрузитьЛицоДоверителяИзСтроки(ИД)
	
	ЛицоДоверителяСтрока = Объект.Доверители.НайтиСтроки(Новый Структура("Идентификатор", ИД))[0];
	ЗагрузитьЗначенияРеквизитаФормы("ЛицоДоверителя", ЛицоДоверителяСтрока);
	
	Если ЛицоДоверителяРеквизиты <> Неопределено И Не ЛицоДоверителяРеквизиты.ЭтоФизическоеЛицо Тогда
		
		Строки = Объект.Доверители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", ИД));
		КоличествоСтрок = Строки.Количество();
		ПредставительУправляющейКомпанииНесколько = КоличествоСтрок > 1;

		Если КоличествоСтрок > 0 Тогда
			ЗагрузитьПредставителяУправляющейКомпанииИзСтроки(Строки[0].Идентификатор);
		Иначе
			ЗаполнитьПустоеЗначениеФормы("ПредставительУправляющейКомпании");
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьПредставителяУправляющейКомпанииИзСтроки(ИД)
	
	ПредставительУправляющейКомпанииСтрока = Объект.Доверители.НайтиСтроки(Новый Структура("Идентификатор", ИД))[0];
	ЗагрузитьЗначенияРеквизитаФормы("ПредставительУправляющейКомпании", ПредставительУправляющейКомпанииСтрока);
	
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьПредставителяИзСтроки(ИД)
	
	ПредставительСтрока = Объект.Представители.НайтиСтроки(Новый Структура("Идентификатор", ИД))[0];
	ЗагрузитьЗначенияРеквизитаФормы("Представитель", ПредставительСтрока, Ложь);
	
	Если ПредставительРеквизиты <> Неопределено 
		И Не ПредставительРеквизиты.ЭтоФизическоеЛицо
		И (ПредставительРеквизиты.ЭтоИндивидуальныйПредприниматель
		Или ПредставительРеквизиты.ЭтоФилиал) Тогда
		
		Строки = Объект.Представители.НайтиСтроки(Новый Структура("ИдентификаторРодителя", ИД));
		КоличествоСтрок = Строки.Количество();
		ЛицоПредставителяНесколько = КоличествоСтрок > 1;
		
		Если КоличествоСтрок > 0 Тогда
			
			Если КоличествоСтрок = 1 Тогда
				ЗагрузитьЛицаПредставителяИзСтроки(Строки[0].Идентификатор);
			Иначе
				СформироватьТаблицуНесколькоПредставителей(Строки[0].ИдентификаторРодителя);
			КонецЕсли;
			
		Иначе
			ЗаполнитьПустоеЗначениеФормы("ЛицоПредставителя");
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьЛицаПредставителяИзСтроки(ИД)
	
	ЛицоПредставителяСтрока = Объект.Представители.НайтиСтроки(Новый Структура("Идентификатор", ИД));
	ЗагрузитьЗначенияРеквизитаФормы("ЛицоПредставителя", ЛицоПредставителяСтрока[0], Ложь);
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьПустоеЗначениеФормы(ИмяЭлементаОрганизация) 
	
	Если ИмяЭлементаОрганизация = "ЛицоДоверителя" 
		Или ИмяЭлементаОрганизация = "ПредставительУправляющейКомпании"
		Или ИмяЭлементаОрганизация = "Представитель"
		Или ИмяЭлементаОрганизация = "ЛицоПредставителя" Тогда
		
		ЭтотОбъект[ИмяЭлементаОрганизация + "ТипСтрока"] = "ФизическоеЛицо";
	Иначе
		ЭтотОбъект[ИмяЭлементаОрганизация + "ТипСтрока"] = "Организация";
	КонецЕсли;
	
	ЗаполнитьТипОрганизации(ИмяЭлементаОрганизация, ЭтотОбъект[ИмяЭлементаОрганизация + "ТипСтрока"]);
	ОбновитьСтрокуДоверителейПредставителей(ИмяЭлементаОрганизация);
	СформироватьЗаголовокДекорации(ИмяЭлементаОрганизация);

КонецПроцедуры

&НаСервере
Процедура ОбновитьОбъект(ТекущийОбъект = Неопределено)
	
	Если ТекущийОбъект = Неопределено Тогда
		ДоверенностьОбъект = РеквизитФормыВЗначение("Объект"); 
	Иначе
		ДоверенностьОбъект = ТекущийОбъект;
	КонецЕсли;
	
	Для Каждого Строка Из ДоверенностьОбъект.Доверители Цикл
		
		СтрокаОбъекта = Объект.Доверители.НайтиСтроки(Новый Структура("Идентификатор", Строка.Идентификатор))[0];
		
		РеквизитыДоверителя = ПолучитьИзВременногоХранилища(СтрокаОбъекта.АдресРеквизитов);
		Строка.ДоверительРеквизиты = Новый ХранилищеЗначения(РеквизитыДоверителя);
		Строка.ЭтоФизЛицо = РеквизитыДоверителя.ЭтоФизическоеЛицо;
		
	КонецЦикла;
	
	Для Каждого Строка Из ДоверенностьОбъект.Представители Цикл
		
		СтрокаОбъекта = Объект.Представители.НайтиСтроки(Новый Структура("Идентификатор", Строка.Идентификатор))[0];
		
		РеквизитыПредставителя = ПолучитьИзВременногоХранилища(СтрокаОбъекта.АдресРеквизитов);
		Строка.ПредставительРеквизиты = Новый ХранилищеЗначения(РеквизитыПредставителя);
		
	КонецЦикла;
	
	Если Не РазрешитьПередоверие Тогда
		ДоверенностьОбъект.ВозможностьПередоверия = ПредопределенноеЗначение("Перечисление.ВозможностьПередоверияМЧД.БезПередоверия");
	КонецЕсли;
	
	Если ТекущийОбъект = Неопределено Тогда
		
		ДоверенностьОбъект.Записать();
		Модифицированность = Ложь;
		ЗначениеВРеквизитФормы(ДоверенностьОбъект, "Объект");
		ПрочитатьРеквизиты(ДоверенностьОбъект);
		
	КонецЕсли;
	
	ПрочитатьСостояниеВДругомРеестре();
	
КонецПроцедуры

&НаСервере
Процедура ПрочитатьРеквизиты(ТекущийОбъект = Неопределено)
	
	Если ТекущийОбъект = Неопределено Тогда
		ДоверенностьОбъект = РеквизитФормыВЗначение("Объект");
	Иначе
		ДоверенностьОбъект = ТекущийОбъект;
	КонецЕсли;
	
	Для Каждого Строка Из ДоверенностьОбъект.Доверители Цикл
		СтрокаОбъекта = Объект.Доверители.НайтиСтроки(Новый Структура("Идентификатор", Строка.Идентификатор))[0];
		СтрокаОбъекта.АдресРеквизитов = ПоместитьВоВременноеХранилище(Строка.ДоверительРеквизиты.Получить(), УникальныйИдентификатор);
	КонецЦикла;
	
	Для Каждого Строка Из ДоверенностьОбъект.Представители Цикл
		СтрокаОбъекта = Объект.Представители.НайтиСтроки(Новый Структура("Идентификатор", Строка.Идентификатор))[0];
		СтрокаОбъекта.АдресРеквизитов = ПоместитьВоВременноеХранилище(Строка.ПредставительРеквизиты.Получить(), УникальныйИдентификатор);
	КонецЦикла;

КонецПроцедуры

&НаСервере
Процедура ЗагрузитьЗначенияРеквизитаФормы(ИмяЭлементаОрганизация, Строка, Доверитель = Истина)
	
	РеквизитыСтруктура = ПолучитьИзВременногоХранилища(Строка.АдресРеквизитов);
	
	Если РеквизитыСтруктура <> Неопределено Тогда
		ЗаполнитьТипОрганизации(ИмяЭлементаОрганизация, РеквизитыСтруктура.Тип);
		ЭтотОбъект[ИмяЭлементаОрганизация + "Реквизиты"] = РеквизитыСтруктура;
	КонецЕсли; 
	
	ЭтотОбъект[ИмяЭлементаОрганизация + "Идентификатор"] = Строка.Идентификатор;
	
	ЭтотОбъект[ИмяЭлементаОрганизация] = Строка[?(Доверитель, "Доверитель", "Представитель")];
	УстановитьОтображениеРеквизитовЗависимыхОтОрганизации(ИмяЭлементаОрганизация);

КонецПроцедуры

&НаСервере
Функция ЗаголовокВыбораТипа(Тип)
	Если Тип = "ФизическоеЛицо" Тогда
		Возврат НСтр("ru='Физическое лицо'");
	КонецЕсли;
	Если Тип = "Контрагент" Тогда
		Возврат НСтр("ru='Контрагент'");
	КонецЕсли;
	Возврат НСтр("ru='Организация'");
КонецФункции

&НаКлиенте
Процедура УдалитьПодпись(Команда)
	
	ТекущиеДанные = Элементы.ЭлектронныеПодписи.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ОчиститьРезультатыПроверки();
	УдалитьПодписьНаСервере(ТекущиеДанные.ПорядковыйНомер);
	ОповеститьОбИзменении(Объект.Ссылка);
	
КонецПроцедуры

&НаСервере
Процедура УдалитьПодписьНаСервере(Знач ПорядковыйНомер)
	
	ЭлектроннаяПодпись.УдалитьПодпись(Объект.ФайлДоверенности, ПорядковыйНомер, УникальныйИдентификатор);
	РассчитатьТехническийСтатус(Ложь);
	ОбновитьОбъект();
	ЗаполнитьСписокПодписей();
	
КонецПроцедуры

&НаСервере
Функция АдресПолномочий()

	Структура = Новый Структура("Полномочия, Ограничения", Объект.Полномочия.Выгрузить(), Объект.Ограничения.Выгрузить());
	Возврат ПоместитьВоВременноеХранилище(Структура, УникальныйИдентификатор);
	
КонецФункции

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
	
КонецПроцедуры

&НаСервере
Процедура ВыполнитьКомандуНаСервере(Знач ПараметрыВыполнения)
	
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

&НаСервереБезКонтекста
Процедура ПрочитатьСостояние(Форма)
	
	Объект    = Форма.Объект;
	Элементы  = Форма.Элементы;
	Если ЗначениеЗаполнено(Объект.Ссылка) И Объект.РегистрироватьВРеестре Тогда
		
		ДанныеСостояния = МашиночитаемыеДоверенностиФНССлужебный.ПрочитатьСостояниеМЧД(Объект.Ссылка);
		Если ЭтоАдресВременногоХранилища(Форма.АдресОшибкиСтатуса) Тогда
			ПоместитьВоВременноеХранилище(ДанныеСостояния.ДанныеОшибкиЗапросаСтатуса, Форма.АдресОшибкиСтатуса);
		Иначе
			Форма.АдресОшибкиСтатуса = ПоместитьВоВременноеХранилище(ДанныеСостояния.ДанныеОшибкиЗапросаСтатуса, Форма.УникальныйИдентификатор);
		КонецЕсли;
		
		ОтобразитьОписаниеСостояния(Форма, ДанныеСостояния);
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПрочитатьСостояниеВДругомРеестре()
	
	Элементы.ГруппаРегистрацияВДругомРеестре.Видимость = Ложь;
	Элементы.ГруппаСтатусВДругомРеестре.Видимость = Ложь;
		
	ПараметрыПереопределения = Новый Структура;
	ПараметрыПереопределения.Вставить("ПоказыватьРегистрироватьВРеестре", Ложь);
	ПараметрыПереопределения.Вставить("ЗаголовокФлажкаРегистрации", "");
	ПараметрыПереопределения.Вставить("ПодсказкаРегистрации", "");
	
	ПараметрыПереопределения.Вставить("ЗарегистрированаВРеестре", Ложь);
	ПараметрыПереопределения.Вставить("Картинка");
	ПараметрыПереопределения.Вставить("СостояниеРегистрации", "");
	ПараметрыПереопределения.Вставить("ПодсказкаСостояния", "");
	
	ПараметрыПереопределения.Вставить("ПолномочияПриОткрытии", Параметры.Полномочия);
	ПараметрыПереопределения.Вставить("ВыбранныеПолномочия",
		Новый Структура("Полномочия, Ограничения", Объект.Полномочия.Выгрузить(), Объект.Ограничения.Выгрузить()));
	ПараметрыПереопределения.Вставить("КодыПолномочийДляДобавления", Новый Массив);
	ПараметрыПереопределения.Вставить("ТекстВопросаДляДобавленияПолномочий", "");
	
	КодыПолномочий = Новый Массив;
	
	МашиночитаемыеДоверенностиФНСПереопределяемый.ПриПолученииСтатусаРегистрации(
		Объект.Ссылка, ПараметрыПереопределения);
	
	Если ПараметрыПереопределения.ПоказыватьРегистрироватьВРеестре Тогда
		
		Элементы.ГруппаРегистрацияВДругомРеестре.Видимость = Истина;
		Элементы.ОписаниеРегистрацииВДругомРеестре.Заголовок = ПараметрыПереопределения.ЗаголовокФлажкаРегистрации;
		Если ЗначениеЗаполнено(ПараметрыПереопределения.ПодсказкаРегистрации) Тогда
			Элементы.ОписаниеРегистрацииВДругомРеестре.Подсказка = ПараметрыПереопределения.ПодсказкаРегистрации;
			Элементы.ОписаниеРегистрацииВДругомРеестре.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
		Иначе
			Элементы.ОписаниеРегистрацииВДругомРеестре.ОтображениеПодсказки = ОтображениеПодсказки.Нет;
		КонецЕсли;
			
		Если Не РеквизитыНедоступныДляРедактирования
			И ЗначениеЗаполнено(ПараметрыПереопределения.КодыПолномочийДляДобавления)
			И Не ТолькоПросмотр Тогда
			КодыПолномочийДляДобавления = ПоместитьВоВременноеХранилище(
				Новый Структура("КодыПолномочийДляДобавления, ТекстВопросаДляДобавленияПолномочий",
					ПараметрыПереопределения.КодыПолномочийДляДобавления,
					ПараметрыПереопределения.ТекстВопросаДляДобавленияПолномочий), УникальныйИдентификатор);
		Иначе
			КодыПолномочийДляДобавления = Неопределено;
		КонецЕсли;
		
	КонецЕсли;
	
	ЗарегистрированаВДругомРеестре = ПараметрыПереопределения.ЗарегистрированаВРеестре;
	
	Если ПараметрыПереопределения.ЗарегистрированаВРеестре Тогда
		Элементы.ГруппаСтатусВДругомРеестре.Видимость = Истина;
		
		Если ЗначениеЗаполнено(ПараметрыПереопределения.Картинка) Тогда
			Элементы.ДекорацияКартинкаДругойРеестр.Видимость = Истина;
			Элементы.ДекорацияКартинкаДругойРеестр.Картинка = БиблиотекаКартинок[ПараметрыПереопределения.Картинка];
		Иначе
			Элементы.ДекорацияКартинкаДругойРеестр.Видимость = Ложь;
		КонецЕсли;
		Если ЗначениеЗаполнено(ПараметрыПереопределения.ПодсказкаСостояния) Тогда
			Элементы.ОписаниеСостоянияВДругомРеестре.Подсказка = ПараметрыПереопределения.ПодсказкаСостояния;
			Элементы.ОписаниеСостоянияВДругомРеестре.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
		Иначе
			Элементы.ОписаниеСостоянияВДругомРеестре.ОтображениеПодсказки = ОтображениеПодсказки.Нет;
		КонецЕсли;
		Элементы.ОписаниеСостоянияВДругомРеестре.Заголовок = ПараметрыПереопределения.СостояниеРегистрации;
		Элементы.РегистрироватьВДругомРеестре.ТолькоПросмотр = Истина;
		РегистрироватьВДругомРеестре = Истина;
		ДоступностьПризнакаРегистрацииВРеестре(ЭтотОбъект);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПрочитатьСтатусДокумента()
	
	ОбновитьСтатус(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьСтатус(НаправитьЗапросВРР = Ложь)
	
	Если Не Параметры.Ключ.Пустая() Тогда
		
		ДанныеСостояния = ОбновитьСтатусИПрочитатьСостояние(Объект.Ссылка, Объект.РегистрироватьВРеестре И НаправитьЗапросВРР);
		
		ТребуетсяОбновлениеДекораций = ТехническийСтатус <> ДанныеСостояния.ТехническийСтатус;
		
		ТехническийСтатус = ДанныеСостояния.ТехническийСтатус;
		
		Если Подписана <> ДанныеСостояния.Подписана Тогда
			Подписана = ДанныеСостояния.Подписана;
			Если Подписана Тогда
				ПрочитатьСостояниеВДругомРеестре();
			КонецЕсли;
			Если Не ТребуетсяОбновлениеДекораций Тогда
				УстановитьВидимостьИДоступность(ЭтотОбъект, "Подписание");
			КонецЕсли;
		КонецЕсли;
		
		Если ТребуетсяОбновлениеДекораций Тогда
			УстановитьВидимостьИДоступность(ЭтотОбъект);
			ОповеститьОЗаписи();
		КонецЕсли;
		
		Если Объект.Статус <> ДанныеСостояния.Статус Тогда
			Объект.Статус = ДанныеСостояния.Статус;
			ОповеститьОбИзменении(Объект.Ссылка);
		КонецЕсли;
		
		Если ЭтоАдресВременногоХранилища(АдресОшибкиСтатуса) Тогда
			ПоместитьВоВременноеХранилище(ДанныеСостояния.ДанныеОшибкиЗапросаСтатуса, АдресОшибкиСтатуса);
		Иначе
			АдресОшибкиСтатуса = ПоместитьВоВременноеХранилище(ДанныеСостояния.ДанныеОшибкиЗапросаСтатуса, УникальныйИдентификатор);
		КонецЕсли;
		
		ОтобразитьОписаниеСостояния(ЭтотОбъект, ДанныеСостояния);
	Иначе
		Элементы.ОписаниеСостояния.Видимость = Ложь;
	КонецЕсли;
	
	ОтобразитьДекорацииСтатуса(ЭтотОбъект);
	
	Если ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.Регистрация")
		Или ТехническийСтатус = ПредопределенноеЗначение("Перечисление.ТехническиеСтатусыМЧД.РегистрацияОтмены") Тогда
		
		Если ПериодОпросаСтатусов = 300 Тогда
			ПериодОпросаСтатусов = 5;
		Иначе
			ПериодОпросаСтатусов = ПериодОпросаСтатусов + Окр(ПериодОпросаСтатусов / 2, 0);
		КонецЕсли;
	Иначе
		ПериодОпросаСтатусов = 300;
	КонецЕсли;
	
	ПодключитьОпросСтатусов();
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ОбновитьСтатусИПрочитатьСостояние(Знач Ссылка, Знач НаправитьЗапросВРР)
	
	Если НаправитьЗапросВРР Тогда
		РегистрыСведений.МашиночитаемыеДоверенностиСтатусы.ОбновлениеСтатусовМЧД(Ссылка);
	КонецЕсли;
	
	ДанныеСостояния = МашиночитаемыеДоверенностиФНССлужебный.ПрочитатьСостояниеМЧД(Ссылка);
	Возврат ДанныеСостояния;
	
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура ОтобразитьОписаниеСостояния(Форма, ДанныеСостояния)
	
	Элементы = Форма.Элементы;
	Объект = Форма.Объект;
	
	#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
	МодульСтроковыеФункции = СтроковыеФункции;
	#Иначе
	МодульСтроковыеФункции = СтроковыеФункцииКлиент;
	#КонецЕсли
	
	Если Форма.Элементы.ДекорацияПросрочена.Видимость Тогда
		Элементы.ОписаниеСостояния.Видимость = Ложь;
	ИначеЕсли Форма.Элементы.ДекорацияГотово.Видимость Тогда
		Форма.Элементы.ОписаниеСостояния.Заголовок = МодульСтроковыеФункции.ФорматированнаяСтрока(
			СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru='<span style=""color: %1"">Не требуется регистрация в реестре ФНС</span>'"), "ПоясняющийТекст"));
		Элементы.ОписаниеСостояния.Видимость = Истина;
	ИначеЕсли Форма.Элементы.ДекорацияПодписана.Видимость Тогда
		Форма.Элементы.ОписаниеСостояния.Заголовок = МодульСтроковыеФункции.ФорматированнаяСтрока(
			СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru='<span style=""color: %1"">Требуется регистрация в реестре ФНС</span>'"), "ПоясняющийТекст"));
		Элементы.ОписаниеСостояния.Видимость = Истина;
	ИначеЕсли ДанныеСостояния.ОтображатьСтатусВДокументе И Объект.РегистрироватьВРеестре Тогда
		СтрокаОбновления = МодульСтроковыеФункции.ФорматированнаяСтрока(НСтр(
			"ru='<a href = ""Обновить"">Обновить</a>'"));
		Элементы.ОписаниеСостояния.Заголовок = Новый ФорматированнаяСтрока(ДанныеСостояния.ОписаниеСостояния,
			Символы.ПС, СтрокаОбновления);
		Элементы.ОписаниеСостояния.Видимость = Истина;
	ИначеЕсли ДанныеСостояния.ОтображатьСтатусВДокументе И ЗначениеЗаполнено(ДанныеСостояния.ОписаниеСостояния) Тогда
		Элементы.ОписаниеСостояния.Заголовок = Новый ФорматированнаяСтрока(ДанныеСостояния.ОписаниеСостояния);
		Элементы.ОписаниеСостояния.Видимость = Истина;
	Иначе
		Элементы.ОписаниеСостояния.Видимость = Ложь;
	КонецЕсли;

КонецПроцедуры

&НаСервереБезКонтекста
Процедура УстановитьСтатусРегистрации(Знач Доверенность, Знач ИдентификаторТранзакции = Неопределено,
	Знач РегистрироватьВРеестреФНС = Истина, Знач РегистрироватьВДругомРеестре = Ложь)
	
	Если РегистрироватьВДругомРеестре Тогда
		МашиночитаемыеДоверенностиФНСПереопределяемый.ПриРегистрацииДоверенности(Доверенность);
	КонецЕсли;
	
	Если РегистрироватьВРеестреФНС Тогда
		МашиночитаемыеДоверенностиФНССлужебный.УстановитьСтатусРегистрации(Доверенность, ИдентификаторТранзакции);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСписокПодписей()
	
	СохранитьРезультатПроверкиПодписей = Ложь;
	ЭлектронныеПодписи.Очистить();
	УстановленныеПодписи = ЭлектроннаяПодпись.УстановленныеПодписи(Объект.ФайлДоверенности);
	
	Для Каждого ЭлектроннаяПодписьФайла Из УстановленныеПодписи Цикл
		
		НоваяСтрока = ЭлектронныеПодписи.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлектроннаяПодписьФайла);
		НоваяСтрока.Объект = Объект.ФайлДоверенности;
		НоваяСтрока.АдресПодписи = ПоместитьВоВременноеХранилище(ЭлектроннаяПодписьФайла.Подпись, УникальныйИдентификатор);
		НоваяСтрока.Статус = СтатусПодписи(НоваяСтрока, ТекущаяДатаСеанса());
		
		ДвоичныеДанныеСертификата = ЭлектроннаяПодписьФайла.Сертификат.Получить();
		Если ДвоичныеДанныеСертификата <> Неопределено Тогда 
			НоваяСтрока.АдресСертификата = ПоместитьВоВременноеХранилище(
			ДвоичныеДанныеСертификата, УникальныйИдентификатор);
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция СтатусПодписи(СтрокаПодписи, ДатаСеанса)
	
	Если Не ЗначениеЗаполнено(СтрокаПодписи.ДатаПроверкиПодписи) Или СтрокаПодписи.ТребуетсяПроверка Тогда
		Статус = НСтр("ru = 'Требуется проверка'");
	ИначеЕсли СтрокаПодписи.ПодписьВерна
		И ЗначениеЗаполнено(СтрокаПодписи.СрокДействияПоследнейМеткиВремени)
		И СтрокаПодписи.СрокДействияПоследнейМеткиВремени < ДатаСеанса Тогда
		Статус = НСтр("ru = 'Была верна на дату подписи'");
	ИначеЕсли СтрокаПодписи.ПодписьВерна Тогда
		Статус = НСтр("ru = 'Верна'");
	Иначе
		Статус = НСтр("ru = 'Неверна'");
	КонецЕсли;
	
	Возврат Статус;
	
КонецФункции

&НаКлиенте
Процедура ОповеститьОЗаписи()
	
	Структура = Новый Структура("Ссылка, СтороныМЧД", Объект.Ссылка, Новый Массив);
	
	Для Каждого Строка Из Объект.Доверители Цикл
		Если ЗначениеЗаполнено(Строка.Доверитель)
			И Структура.СтороныМЧД.Найти(Строка.Доверитель) = Неопределено Тогда
			Структура.СтороныМЧД.Добавить(Строка.Доверитель);
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого Строка Из Объект.Представители Цикл
		Если ЗначениеЗаполнено(Строка.Представитель)
			И Структура.СтороныМЧД.Найти(Строка.Представитель) = Неопределено Тогда
			Структура.СтороныМЧД.Добавить(Строка.Представитель);
		КонецЕсли;
	КонецЦикла;
	
	Оповестить("Запись_МашиночитаемыеДоверенности", Структура, Объект.Ссылка);
	
КонецПроцедуры

&НаКлиенте
Функция ОрганизацииДоверители()
	
	Массив = Новый Массив;
	Строки = Объект.Доверители.НайтиСтроки(Новый Структура("ЭтоФизЛицо", Ложь));
	Для Каждого Строка Из Строки Цикл
		Массив.Добавить(Строка.Доверитель);
	КонецЦикла;
	Возврат Массив;
	
КонецФункции

&НаСервереБезКонтекста
Функция ИспользуетсяАвтоНаименование(Объект)
	
	АвтоНаименование = Справочники.МашиночитаемыеДоверенности.АвтоНаименование(Объект);
	Возврат Не ЗначениеЗаполнено(Объект.Наименование) Или Объект.Наименование = АвтоНаименование;
	
КонецФункции

&НаКлиенте
Процедура ПодключитьОпросСтатусов()
	ОтключитьОбработчикОжидания("ПрочитатьСтатусДокумента");
	ПодключитьОбработчикОжидания("ПрочитатьСтатусДокумента", ПериодОпросаСтатусов, Истина);
КонецПроцедуры

&НаКлиенте
Процедура ПродолжитьРегистрациюДоверенности(НеИспользуется, РегистрироватьВФНС) Экспорт
	
	УстановитьСтатусРегистрации(Объект.Ссылка, Неопределено, РегистрироватьВФНС, РегистрироватьВДругомРеестре);
	Если РегистрироватьВФНС Тогда
		ОбновитьСтатус(Истина);
	КонецЕсли;
	Если РегистрироватьВДругомРеестре Тогда
		ПрочитатьСостояниеВДругомРеестре();
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти